如何消除两个表单之间的通信延迟?

时间:2011-11-10 13:40:11

标签: c# winforms

目前我正在使用手工制作的Messagebox构建:

Communicate between two windows forms in 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中

我正在改变帧速率。 在调试这个项目时,我发现FrameRate在Form2和Form1上都有变化,但是当我进一步运行时

  label2.Text = Framerate

没有改变。我的问题是,为什么它不会马上改变,我该怎么办才能让它立即改变

编辑:

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

当我关闭Form2时,Label1.Text会被更改(因为获取/设置的东西),但对我的应用来说已经太迟了

编辑:

经过一些麻烦,我自己找到了答案,也许并不好,但为我的申请工作:

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();
        }
    }
}
每个人都感谢你们帮助我。

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

您需要在Form2中包含对Form1.Label2的引用,或者让Form2引发Form1正在侦听以进行帧率更改的事件。

答案 2 :(得分:0)

经过一番捣乱后,我自己找到了答案,也许并不好,但为我的申请工作:

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();
        }
    }
}