簡體   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