線程間操作無效: 從不是創建控件“t1”的線程訪問它

線程間操作無效: 從不是創建控件“t1”的線程訪問它


開發時 經常會遇到上面的問題,原因常常是在新Thread中給窗體中的控件賦值。

爲了解決此問題,我們可以調用this.BeginInvoke(Delegate method);方法,this.表示窗體,當然可以用想要調用 的控件,比如Label,Button。

此方法的參數要求爲委託參數,我們可以使用

this.BeginInvoke(MethodInvoker)delegate(){//方法體})

來簡寫,

private void button1_Click(object sender, EventArgs e)

       {

           Thread t = new Thread(new ParameterizedThreadStart(test1));

           t.Start(t1);

       }

       void test1(object  label)

       {

           this.BeginInvoke((MethodInvoker)delegate()

           {

               (label as Label).Text = Thread.CurrentThread.ManagedThreadId.ToString();

           });

//直接給控件賦值會引發異常

   // (label as Label).Text = Thread.CurrentThread.ManagedThreadId.ToString();

       }

當然這裏也可以調用Invoke方法,跟BeginInvoke的區別只是同步跟異步的區別而已。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章