回答
不知道你的“代码直接在消息泵运行”,但看着参考源,你可以看到的意思,基本上
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线程上运行代码
- 3. Observable仍然在UI线程上运行
- 4. 这是否在UI线程上运行
- 5. 如何在.net中的主UI线程以外的线程上运行UI?
- 6. 运行多个UI线程
- 7. 后台线程vs UI线程
- 8. android:在UI线程中运行耗时的任务?
- 9. 确保在ui线程上运行异步线程
- 10. 线程Android在UI线程
- 11. 没有UI线程的任务同步
- 12. 如何从UI线程运行特定类型的任务?
- 13. 在UI线程中运行的服务中是否可运行
- 14. 从非UI线程访问UI线程
- 15. 在非UI线程上运行RIA服务
- 16. 为什么Android服务需要在UI线程上运行?
- 17. 如何在使用TPL时在UI线程上调用方法?
- 18. UI Media UI上的Android MediaPlayer线程
- 19. 即使在UI线程上执行时的跨线程操作
- 20. 非UI线程上的DispatcherObject
- 21. UI线程上的Dispatcher.Dispatch
- 22. Android服务,线程和UI
- 23. UI线程块
- 24. BlockingCollection + UI线程
- 25. 与UI线程
- 26. Android UI线程
- 27. 跨线程UI
- 28. 线程C#UI
- 29. 为什么当我在UI线程上运行它时,必须在主UI线程上调用'setAdListener'
- 30. 同步方法是否在UI线程(Android)的不同线程上运行?
你能举出一些示例代码,以及你已经注意到的例子吗? –
1)如果沿着“UI”任务运行的某个地方,它会调用TaskScheduler.FromCurrentSynchronizationContext()来创建另一个任务。该新任务不会在UI线程上运行。 –
2)如果System.ComponentModel.BackgroundWorker.RunWorkerAsync()从“UI”任务执行,那么它的RunWorkerCompleted事件不会在UI线程中引发。 –