我有一个由 AsyncOperation 通过 .Post() 调用的方法 Update()。当我在该函数中放置一个 MessageBox 时,我得到了多个消息框,我试图理解为什么会发生这种情况。
消息框应停止执行 Update(),直到单击“确定”,但由于 .Post(),我重新进入 Update(),导致下一个消息框出现在前一个消息框关闭之前。
我的第一个想法是将 SyncLock 放在 Update() 中,这样它就永远不能同时运行,但它没有效果。当我在 MessageBox 中输出 .ManagedThreadID 时,所有调用都具有相同的线程 ID,因此 SyncLock 不起作用似乎是合乎逻辑的,因为它只会阻塞不同的线程。
那么有人可以解释这里发生了什么吗?单个线程如何同时执行相同的功能?