重慶分公司,新征程啟航
為企業提供網站建設、域名注冊、服務器等服務
為企業提供網站建設、域名注冊、服務器等服務
線程間操作無效: 從不是創建控件“t1”的線程訪問它
成都創新互聯-專業網站定制、快速模板網站建設、高性價比淶源網站開發、企業建站全套包干低至880元,成熟完善的模板庫,直接使用。一站式淶源網站制作公司更省心,省錢,快速模板網站建設找我們,業務覆蓋淶源地區。費用合理售后完善,10余年實體公司更值得信賴。
開發時 經常會遇到上面的問題,原因常常是在新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的區別只是同步跟異步的區別而已。