2009-06-03 19 views
5

您好我正在开发一个.NET应用程序形成,我要实现以下目标:调用窗口从另一个线程(.NET)

我有一个WinForms应用程序,以及定时器(System.Timers.timer )根据时间表执行一个线程。问题是我无法从辅助线程(WorkerThread)访问UI(窗体窗体),错误说像组件不能从未创建它的线程访问。

有什么办法可以达到这个目的吗?

谢谢!

回答

10
formObject.Invoke(delegate { 
     // action to perform on UI thread 
}); 
+2

注意,这项工作基本上被添加到UI线程的工作队列中,最终在有时间的时候执行它。 – 2009-06-05 13:56:23

2

比方说,您的辅助方法(即你在一个线程执行)是

DoWork(args) 
{ 
    ... 
    UpdateUI(); 
} 

,处理定时器的经过时应该做到这一点的方法:

OnTimerElapsed(object sender, ElapsedEventArgs e) 
{ 
    args = GetArgs(); 
    this.BeginInvoke(() => DoWork(args)); 
    // 'this' refers to form here. 
    // You can also use BeginInvoke on a user control for updating it. 
} 

这将运行DoWork在单独的线程中,DoWork将具有更新UI的能力。

相关问题