从另一个线程(.Net)调用Windows窗体
嗨,我正在开发.Net应用程序,我想实现以下目标:
我有一个winforms应用程序和一个计时器(System.Timers.timer),它根据计划排除了一个线程。 问题是我无法从辅助线程(WorkerThread)访问UI(窗体),错误说不能从没有创建它的线程访问该组件。
有没有办法实现这个目标?
谢谢!
formObject.Invoke(delegate { // action to perform on UI thread });
假设您的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的能力。