从另一个线程(.Net)调用Windows窗体

时间:2009-06-03 21:54:44

标签: c# .net multithreading

您好我正在开发.Net应用程序,我希望实现以下目标:

我有一个winforms应用程序和一个计时器(System.Timers.timer),它根据计划对线程进行了处理。问题是我无法从辅助线程(WorkerThread)访问UI(窗体),错误说不能从没有创建它的线程访问该组件。

有没有办法实现这个目标?

谢谢!

2 个答案:

答案 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的能力。