首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用于AsyncOperation的SyncLock

用于AsyncOperation的SyncLock
EN

Stack Overflow用户
提问于 2011-10-30 05:43:47
回答 1查看 308关注 0票数 0

我有一个由AsyncOperation通过.Post()调用的方法更新()。当我在该函数中放置一个MessageBox时,我得到了多个MessageBox,我试图理解为什么会发生这种情况。

Messagebox应该暂停执行Update(),直到单击'OK‘为止,但由于.Post(),我在Update()中重新进入,导致下一个消息框在前一个消息框关闭之前出现。

我的第一个想法是将SyncLock放在Update()中,这样它永远不会同时运行,但它没有任何效果。当我在MessageBox中输出.ManagedThreadID时,所有调用都具有相同的线程ID,因此SyncLock没有作用似乎是合乎逻辑的,因为它只阻塞不同的线程。

有人能解释一下这是怎么回事吗?单个线程如何同时执行相同的函数?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-10-30 23:25:28

消息框只在显示它的线程上是模态的。本例中的UI线程应该是这样的。它不能阻止工作线程调用Post(),因此您将继续获得更多的消息框。SyncLock也不能工作,它在同一线程上是可重入的。在MessageBox.Show()调用之前设置为true,调用后设置为false的简单布尔标志就可以完成此任务,如果设置为true,则不要再次调用Show。

或者只是不使用MessageBox,Debug.Print()是一种很好的跟踪方法。默认情况下,文本转到“输出”窗口。调试器断点也可以创造奇迹。

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

https://stackoverflow.com/questions/7941905

复制
相关文章

相似问题

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