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