我目前正在尝试编写一个组件,其中某些部分应该在UI线程上运行(解释会很长).所以最简单的方法是将控件传递给它,并在其上使用InvokeRequired/Invoke.但我不认为将控件引用传递给"数据/背景"组件是一个好设计,所以我正在寻找一种在UI线程上运行代码的方法,而无需提供控件.像WPF中的Application.Dispatcher.Invoke ...
任何想法,马丁
有一种更好,更抽象的方法可以在WinForms和WPF上运行:
System.Threading.SynchronizationContext.Current.Post(theMethod, state);
这是有效的,因为WindowsForms将WindowsFormsSynchronizationContext
对象安装为当前同步上下文.WPF执行类似的操作,安装它自己的专用同步上下文(DispatcherSynchronizationContext
).
.Post
对应于control.BeginInvoke
,.Send
对应于control.Invoke
.