0

我有一个表单,可以打开并使用后台工作人员连接到现有的计算对象。当后台工作人员完成后,会发送一条消息,并且表单会运行一个 OnCompletion 方法。如果计算失败,该方法将创建一个消息框。让我们假设计算失败。然后,用户将收到有关失败的消息。现在我们关闭表单,打开一个新的表单实例,然后再次运行计算。计算再次失败,表单运行 OnCompletion 方法并在消息框处崩溃。

MessageBox.Show(this, message, title, MessageBoxButtons.OK, MessageBoxIcon.Exclamation);

问题是“这个”(形式)被处置了。如果更改代码以测试 IsDiposed:

            if (!IsDisposed)
            MessageBox.Show(this, message, title, MessageBoxButtons.OK, MessageBoxIcon.Exclamation);

然后消息框没有被调用,但我看到我的 OnCompletion 方法立即第二次运行,IsDiposed 现在为假,并且消息框被正确调用。

虽然我测试表单是否已处理解决了问题,但如果我的 OnCompletion 方法被调用两次,我认为我一定做错了。

请注意,只有在原始表单已关闭时才会对 OnCompletion 进行双重调用。之后,每次运行计算,都会调用两次 OnCompletion 方法,第一次 this.IsDiposed 为 true,第二次为 false。

任何人都有解释或建议停止对 OnCompletion 的双重调用。

4

0 回答 0