您好我正在开发一个.NET应用程序形成,我要实现以下目标:调用窗口从另一个线程(.NET)
我有一个WinForms应用程序,以及定时器(System.Timers.timer )根据时间表执行一个线程。问题是我无法从辅助线程(WorkerThread)访问UI(窗体窗体),错误说像组件不能从未创建它的线程访问。
有什么办法可以达到这个目的吗?
谢谢!
您好我正在开发一个.NET应用程序形成,我要实现以下目标:调用窗口从另一个线程(.NET)
我有一个WinForms应用程序,以及定时器(System.Timers.timer )根据时间表执行一个线程。问题是我无法从辅助线程(WorkerThread)访问UI(窗体窗体),错误说像组件不能从未创建它的线程访问。
有什么办法可以达到这个目的吗?
谢谢!
formObject.Invoke(delegate {
// action to perform on UI thread
});
比方说,您的辅助方法(即你在一个线程执行)是
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的能力。
注意,这项工作基本上被添加到UI线程的工作队列中,最终在有时间的时候执行它。 – 2009-06-05 13:56:23