[英]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.