我怎样才能消除2种形式之间的通信延迟

本文关键字:之间 延迟 通信 2种 | 更新日期: 2023-09-27 18:13:58

目前我正在使用手工消息框构建的想法:

c#中两个窗体之间的通信

这个解决方案作为我项目的一部分的基础,我发现当我使用这个代码时,它没有立即反应:

//Form 1
public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
        Framerate = "Test1";
    }
    private void button1_Click(object sender, EventArgs e)
    {
        Form2 frm = new Form2(this);
        frm.Show();
        label2.Text = Framerate; // this statement is delayed / working too soon
    }
    public string Framerate
    {
        get { return label1.Text; }
        set { label1.Text = value; }
    }
}

在Form2中我正在改变帧率。当调试这个项目时,我发现帧速率在Form2和Form1中都发生了变化,但当我进一步运行它时

  label2.Text = Framerate

不改变。我的问题是,为什么它没有立即改变,我该怎么做才能使它立即改变

编辑:

似乎在显示Form2之前运行了整个button1_click。

Label1。当我关闭Form2时,文本被更改(因为get/set的东西),但这对我的应用程序来说太晚了

编辑:

经过一番折腾,我自己找到了一个答案,也许不太好,但对我的应用程序有用:

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
        Framerate = "Test1";
    }
    private void button1_Click(object sender, EventArgs e)
    {
        Form2 frm = new Form2(this);
        frm.Show();
    }
    private void test()
    {
        label2.Text = Framerate;
    }
    public string Framerate
    {
        get { return label1.Text; }
        set
        {
            label1.Text = value;
            test();
        }
    }
}

感谢大家对我的帮助。

我怎样才能消除2种形式之间的通信延迟

label2.Text = Framerate;之后尝试label2.Refresh();

您需要包含对Form1的引用。

在你的Form2中的Label2,或者让Form2引发一个事件,Form1正在监听帧率变化。

经过一番折腾,我自己找到了一个答案,也许不太好,但对我的应用程序有用:

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
        Framerate = "Test1";
    }
    private void button1_Click(object sender, EventArgs e)
    {
        Form2 frm = new Form2(this);
        frm.Show();
    }
    private void test()
    {
        label2.Text = Framerate;
    }
    public string Framerate
    {
        get { return label1.Text; }
        set
        {
            label1.Text = value;
            test();
        }
    }
}