您好我正在开发.Net应用程序,我希望实现以下目标:
我有一个winforms应用程序和一个计时器(System.Timers.timer),它根据计划对线程进行了处理。问题是我无法从辅助线程(WorkerThread)访问UI(窗体),错误说不能从没有创建它的线程访问该组件。
有没有办法实现这个目标?
谢谢!
答案 0 :(得分:10)
formObject.Invoke(delegate {
// action to perform on UI thread
});
答案 1 :(得分:2)
假设你的worker方法(你在一个线程中执行)是
DoWork(args)
{
...
UpdateUI();
}
处理计时器Elapsed事件的方法应该这样做:
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的能力。