相關文章:
C# Delegates with Anonymous Methods(匿名方法)and Named Methods(具名方法)
框架如下
1: private void button1_Click(object sender, EventArgs e)
2: {
3: G_th = new System.Threading.Thread( //新建一條線程
4: delegate() //使用匿名方法
5: {
6:
7: });
8: }
該執行緒要執行的內容為while-loop
利用while(true){}不斷進行計數器++, 當超過10000則歸零
1: private void button1_Click(object sender, EventArgs e)
2: {
3: G_th = new System.Threading.Thread( //新建一條線程
4: delegate() //使用匿名方法
5: {
6: int cnt = 0; //初始化計數器
7: while (true) //開始無限循環
8: {
9: cnt = ++cnt > 10000 ? 0 : cnt;
10:
11: }
12: });
13: }
如果想要將計數器顯示在人機介面上如下(錯誤示範)
1: private void button1_Click(object sender, EventArgs e)
2: {
3: G_th = new System.Threading.Thread( //新建一條線程
4: delegate() //使用匿名方法
5: {
6: int cnt = 0; //初始化計數器
7: while (true) //開始無限循環
8: {
9: cnt = ++cnt > 10000 ? 0 : cnt;
10: label1.Text = cnt.ToString();
11: }
12: });
13: G_th.Start();
14: }
label.Text = cnt.ToString();這一行會跳出錯誤訊息
Usually I used to using a timer to access that global variable (cnt).
In fact there is a better way to do that by invoking an anonymous method.
// Invoke an anonymous method on the thread of the form.
this.Invoke( (MethodInvoker)
delegate
{
});
1: private void button1_Click(object sender, EventArgs e)
2: {
3: G_th = new System.Threading.Thread( //新建一條線程
4: delegate() //使用匿名方法
5: {
6: int cnt = 0; //初始化計數器
7: while (true) //開始無限循環
8: {
9: cnt = ++cnt > 10000 ? 0 : cnt;
10: this.Invoke( //將程式碼交給主線程執行
11: (MethodInvoker)delegate //使用匿名方法
12: {
13: label1.Text = cnt.ToString();
14: });
15: }
16: System.Threading.Thread.Sleep(1000);
17: });
18: G_th.Start();
19: }
全站熱搜
留言列表