一直以來都是接觸B/S開發,很少做C/S開發,線程就用得更少了,最近做一些工作中用到的小軟件終於用上了線程,記錄一些心得.
場景:
1:假設有窗體F,裡面有一按鈕BtnA,及一Label控件.
2:有一類A,裡面有一方法Start().
要求:
點擊按鈕BtnA後,根據Start()方法裡面操作邏輯,將狀態顯示在Label中.
最開始做的時候是實例化類A的時候將整個窗體或者要改變值的控件傳入類A中,然後再在類A中操作,可想而知這樣是非常不好的.
查閱資料後,終於找到了一點解決方法:利用委托或事件,以下是基本代碼.
1 private void BtnA_Click(object sender, EventArgs e)
2 {
3 A ms = new A();
4 //委托方法{實例化類A中定義的委托}
5 //ms.delSetInfo = new A.dSetSourceInfo(this.SetInfoOne);
6 //或
7 //事件觸發{注冊類A中定義的事件}
8 ms.SetInfo += new EventHandler(ms_SetInfoTwo);
9 Thread m = new Thread(new ThreadStart(ms.Start));
10 m.Start();
11 }
12
13
14//委托
15
16 private delegate void mySetInfo(string s);
17 void SetInfoOne(string s)
18 {
19 if (this.InvokeRequired)
20 {
21 this.Invoke(new mySetInfo(SetInfoOne), s);
22 return;
23 }
24 this.Label1.Text = s;
25 }
26
27
28//事件
29
30 void ms_SetInfoTwo(object sender, EventArgs e)
31 {
32 if (this.InvokeRequired)
33 {
34 this.Invoke(new System.EventHandler(ms_SetInfoTwo), sender);
35 return;
36 }
37 this.Label1.Text = (string)sender;
以上為一些簡單的應用,其它復雜的基本上都可以按照這一招來做。