试试SynchronizationContext.Current吧。这具有大致映射到和上的Post和Send成员。只要 UI 线程相对于特定控件处于活动状态,这些操作就会继续运行。BeginInvokeInvokeControl
该类型SynchronizationContext并非特定于 WinForms,利用它的解决方案将可移植到其他框架,例如 WPF。
例如。
开始调用代码
void OnButtonClicked() {
DoBackgroundOperation(this);
}
void DoBackgroundOperation(ISynchronizedInvoke invoke) {
ThreadPool.QueueUserWorkItem(delegate {
...
delegate.BeginInovke(new MethodInvoker(this.BackgroundOperationComplete), null);
});
}
同步上下文代码
void OnButtonClicked() {
DoBackgroundOperation(SynchronizationContext.Current);
}
void DoBackgroundOperation(SynchronizationContext context) {
ThreadPool.QueueUserWorkItem(delegate {
...
context.Post(delegate { this.BackgroundOperationComplete() }, null);
});
}