2010-08-16 63 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 
} 
相關問題