首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >异步调用如何知道何时在新线程中启动已完成的事件或使用调用方线程?

异步调用如何知道何时在新线程中启动已完成的事件或使用调用方线程?
EN

Stack Overflow用户
提问于 2011-03-16 09:32:55
回答 1查看 314关注 0票数 1

假设我们有一个带有TestService方法的服务DoWork。在客户机上,它将生成DoWorkCompletedDoWorkAsync方法。

这是我的观察,如果您从UI线程调用DoWorkAsyncDoWorkCompleted将按预期在UI线程上执行。

但是,如果我启动BackgroundWorker并从它调用服务DoWorkAsync,那么DoWorkCompleted将在调用方线程以外的新线程上执行。示例:

从线程2 Thread

  • Worker <代码>H 120服务运行执行>d21执行<-线程3 <-线程3<代码>H 123工作者<代码>d24执行<- UI线程执行<- UI线程<代码>G 226

服务客户端如何知道何时启动新线程以及何时将其发回调用方线程?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-03-16 09:41:20

这与线程上SynchronizationContext的可用性有关。在Windows中,我假设Silverlight是相同的,当您启动一个应用程序时,将成为UI线程的主线程提供了一个SynchronizationContext,它允许将调用封送回UI线程。

在第一个场景中,由于您从具有可用同步上下文的线程调用DoWorkAsync,所以DoWorkCompleted被封送回初始线程。

在第二个场景中,您所处的线程池线程没有同步上下文,因此不会将DoWorkCompleted封送回初始线程。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5323280

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档