回答
不知道你的“代码直接在消息泵运行”,但看着参考源,你可以看到的意思,基本上
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线程中引发。 –