[.Net] 跨线程调用窗体控件

.Net不允许跨线程直接调用窗体控件,原因是如果有两个或多个线程操作某一控件的状态,则可能会迫使该控件进入一种不一致的状态。  还可能会出现其他与线程相关的 Bug,例如争用情况和死锁。 

两种解决方案:

 

(1)不进行系统安全检查

Control.CheckForIllegalCrossThreadCalls = false;

 

(2)委托

private delegate void TickClient(object sender, ElapsedEventArgs e);

void Tick(object sender, ElapsedEventArgs e)
{
      if (labelSurplusShow.InvokeRequired) {
      TickClient tc = new TickClient(Tick);
      labelSurplusShow.Invoke(tc, new object[] {sender,e});
      }
      else {
         labelSurplusShow.Text = last.ToString("xxxxxxx");
      }
}

 

posted @ 2016-12-07 16:40  panpan_v1  阅读(225)  评论(0编辑  收藏  举报