[.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");
      }
}
原文地址:https://www.cnblogs.com/panpan-v1/p/6141766.html