假设我们有一个带有TestService方法的服务DoWork。在客户机上,它将生成DoWorkCompleted和DoWorkAsync方法。
这是我的观察,如果您从UI线程调用DoWorkAsync,DoWorkCompleted将按预期在UI线程上执行。
但是,如果我启动BackgroundWorker并从它调用服务DoWorkAsync,那么DoWorkCompleted将在调用方线程以外的新线程上执行。示例:
从线程2 Thread
服务客户端如何知道何时启动新线程以及何时将其发回调用方线程?
发布于 2011-03-16 09:41:20
这与线程上SynchronizationContext的可用性有关。在Windows中,我假设Silverlight是相同的,当您启动一个应用程序时,将成为UI线程的主线程提供了一个SynchronizationContext,它允许将调用封送回UI线程。
在第一个场景中,由于您从具有可用同步上下文的线程调用DoWorkAsync,所以DoWorkCompleted被封送回初始线程。
在第二个场景中,您所处的线程池线程没有同步上下文,因此不会将DoWorkCompleted封送回初始线程。
https://stackoverflow.com/questions/5323280
复制相似问题