回答
不知道你的「代碼直接在消息泵運行」,但看着參考源,你可以看到的意思,基本上
WindowsFormsSynchronizationContext.Send
= Control.Invoke
WindowsFormsSynchronizationContext.Post
= Control.BeginInvoke
DispatcherSynchronizationContext.Send
= Dispatcher.Invoke
DispatcherSynchronizationContext.Post
= Dispatcher.BeginInvoke
所以當任務調度程序在UI線程上調度一個任務時,它應該等於你這麼做
我想如果你從UI任務內部調用例如TaskScheduler.FromCurrentSynchronizationContext(),它真的不知道它是WinForm還是Dispatcher實現它?可能它只是返回默認的SynchronizationContext ... –
'TaskScheduler.FromCurrentSynchronizationContext()'使用'SynchronizationContext.Current',它反過來從當前正在運行的線程中獲取它:'Thread.CurrentThread.GetExecutionContextNoCreate()。SynchronizationContext' –
- 1. 在UI線程上執行長任務
- 2. 在UI線程上運行的TPL數據流塊
- 3. 新線程運行的UI線程
- 4. 如何強制任務在UI線程上運行?
- 5. 使用任務vs調度程序進行UI線程操作
- 6. Observable仍然在UI線程上運行
- 7. 在UI線程上運行什麼?
- 8. 這是否在UI線程上運行
- 9. 在UI線程上運行代碼
- 10. 是否SimpleCursorAdapter在UI線程上運行
- 11. 如何在.net中的主UI線程以外的線程上運行UI?
- 12. 運行多個UI線程
- 13. 後臺線程vs UI線程
- 14. android:在UI線程中運行耗時的任務?
- 15. 確保在ui線程上運行異步線程
- 16. 線程Android在UI線程
- 17. 阻止UI線程的任務繼續
- 18. 沒有UI線程的任務同步
- 19. 如何從UI線程運行特定類型的任務?
- 20. 在UI線程中運行的服務中是否可運行
- 21. 從非UI線程訪問UI線程
- 22. C#,MVVM,任務和UI線程
- 23. 任務<T>凍結UI線程
- 24. 在非UI線程上運行RIA服務
- 25. 爲什麼Android服務需要在UI線程上運行?
- 26. 如何在使用TPL時在UI線程上調用方法?
- 27. 用於長時間運行的任務的線程池或TPL
- 28. 的Android - 後可運行於UI線程
- 29. UI Media UI上的Android MediaPlayer線程
- 30. 即使在UI線程上執行時的跨線程操作
你能舉出一些示例代碼,以及你已經注意到的例子嗎? –
1)如果沿着「UI」任務運行的某個地方,它會調用TaskScheduler.FromCurrentSynchronizationContext()來創建另一個任務。該新任務不會在UI線程上運行。 –
2)如果System.ComponentModel.BackgroundWorker.RunWorkerAsync()從「UI」任務執行,那麼它的RunWorkerCompleted事件不會在UI線程中引發。 –