2011-11-10 32 views
0

目前我使用的是手工製作的消息框構建由的想法:把我的項目的一部分,我發現它不反應立竿見影的基地時,我使用此代碼如何刪除2個表單之間的通信延遲?

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

在窗體2,我改變幀率。 調試這個項目中,我發現了幀率在Form2的變化,也Form1上時,但是當我再運行它

label2.Text = Framerate 

沒有改變。我的問題,爲什麼不改變權限了,我能做些什麼來得到它馬上

編輯更改:

現在看來,這顯示窗體2之前運行整體的button1_Click。當我在關閉窗體2(bacause的get/set方法的東西)

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

大家感謝試圖幫助我。

+0

LarsTech,我不能7小時 – Moonlight

回答

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

嘗試label2.Text = Framerate;之後的label2.Refresh();

+0

那是不是工作,但感謝對策的探討中回答我的問題 – Moonlight

+0

然後在按鈕單擊事件中的'frm.Show();'後嘗試'Thread.Sleep(10);'。 – Fischermaen

1

您需要在Form2中包含對Form1.Label2的引用,或者讓Form2引發Form1正在偵聽Framerate更改的事件。一些搞亂以防萬一我找到了答案自己後