2013-01-21 74 views
0

我有一個帶有幾個進度條的主線程。每個進度條都是DataTable讀數的進度,所以我有6個不同變量的進度條(DataTable dt1, ... dt2, ... dt3, ...),這是疼痛開始的地方。從線程到主線程的交叉結果

我一直在使用任務,線程,BackgroundWorker的,等等,我無法找到一個乾淨的方式:

  • 選擇信息的位置讀取
  • 負載Async上的主要進展螺紋
  • 返回讀DataTable並將其存儲在各自的dt

我有做到了:

Task t = Task.Factory.StartNew(new Action(() => 
     { 
      dt1 = customProgress.Read<DataTable>("Path"); 
     })); 

編輯:我的問題很混亂,事實上。我將重寫它:

是否有更有效的方法來通過線程交叉這種信息或創建一個變量來等待MainThread運行時的結果?

+0

我不明白。你想要在後臺線程上執行代碼,但是你不想指定代碼應該在後臺線程上執行? – svick

+0

'Task.Factory.StartNew()'是將該操作放在線程池上,以便它異步運行並且不會阻塞main。如果你刪除它,那麼它會阻止main()直到它完成。你可以刪除'new Action()',因爲它知道如何適當地建立一個lambda,但如果你想異步運行,其餘部分是必須的。 – Despertar

+3

你真的認爲這是完成這麼複雜任務的代碼量過大嗎?如果這對你來說是一個漫長而乏味的代碼,那麼你將會在編程生涯中遇到一些真正的困難。 – Servy

回答

0

不需要等待主線程阻塞UI。相反,您可以在使用Task.Factory.ContinueWhenAll()方法完成所有任務時設置延續。如果你想在UI線程上運行這個延續,那麼傳遞scheduler參數爲TaskScheduler.FromCurrentSynchronizationContext()