2010-08-16 34 views

回答

3

如果工作线程是Task<TResult>,那么您可以从Task<TResult>.Result属性检索结果。

如果工作线程为BackgroundWorker,那么您可以从传递给BackgroundWorker.RunWorkerCompleted的参数对象中的 RunWorkerCompletedEventArgs.Result属性检索结果。

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

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

0

这取决于。
什么是主线程?
它对数据有什么作用?

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

0

它取决于线程是如何创建的以及主线程是什么类型的线程。如果是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 
} 
相关问题