繁体   English   中英

C#如何将对象从工作线程传递回主线程?

[英]C# How do I pass object back to main thread from worker thread?

如何处理从工作线程公共方法返回的数据?

谢谢。

如果辅助线程是Task<TResult> ,则可以从Task<TResult>.Result属性检索结果。

如果辅助线程是BackgroundWorker ,则可以从传递给BackgroundWorker.RunWorkerCompleted的参数对象中的RunWorkerCompletedEventArgs.Result属性检索结果。

如果工作线程是通过Delegate.BeginInvoke执行的ThreadPool线程,则即使委托已完成,也可以通过调用EndInvoke检索结果。

如果工作线程是一个Thread ,或者ThreadPool通过执行线程ThreadPool.QueueUserWorkItem ,则必须“回报”的结果通过设置参数的子对象,通过使用Lambda绑定变量,或通过使用全局变量。

这取决于。
什么是主线程?
数据在做什么?

例如,在WinForms中,您可以调用Invoke方法以数据作为参数在主线程上运行回调。

这取决于线程的创建方式以及主线程是哪种线程。 如果它是WinForms或WPF线程,则最直接的方法是在工作线程完成后,使用主线程的SynchronizationContext在主线程上执行操作。

void StartWorker() {
  var context = SynchronizationContext.Current;
  ThreadPool.QueueUserWorkItem(WorkerThread, context);
}

void WorkerThread(object state) {
  var context = (SynchronizationContext)state;
  ...;
  context.Post(WorkerDone, ...);
}

void WorkerDone(object state) {
  // back on UI thread
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM