我正在開發基于 C# 的自動化桌面應用程式(使用 WPF),但遇到了一個問題。
自動化程序的計算量很大,因此 WPF 視窗完全被凍結。
是的,我已經考慮過異步運行代碼,但這會導致更多錯誤,因為代碼正在運行之前。
我需要的是一種在與 UI 不同的執行緒上運行該代碼的方法,允許用戶在應用程式運行時與其進行互動。
謝謝
uj5u.com熱心網友回復:
好吧,答案取決于您是否需要將結果推送回 UI 執行緒。
如果不是 - 使用 TPL, Parallel.For/ForEach并行處理集合。方法回傳ParallelLoopResult,它允許檢查計算狀態。查看檔案
另一種方式,如評論中所述,是使用Task- Task.WhenAll/ Task.WaitAll。雖然WaitAll本質上是同步的并且仍然會凍結您的應用程式,但WhenAll不是。我猜您遇到的問題與從非主執行緒訪問 UI 相關,這需要使用Dispatcher(有一種方法可以將要在主執行緒上運行的 Action 排隊)。一般建議 - 首先await Task.WhenAll(...),然后使用 UI。
另外,請參閱這篇文章以獲取更多線索。
uj5u.com熱心網友回復:
事實證明,我是從第二個執行緒訪問 UI,根據 WPF,這是一個很大的問題。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/372428.html
