我最近为一些本科生设置了一些课程作业,他们必须使用提供给他们的小型且相对简单的 C# 库。这个库的主要目的是显示一个简单的表单,它由一个彩色网格(他们可以操纵)、一些按钮和一个带有一些文本的标签组成。
他们扩展的类提供了许多他们必须实现的抽象方法,其中之一称为 UpdateAction 并以设定的时间间隔自动调用。
我自己没有遇到以下问题,但是在实验室中,一些学生在关闭表单时遇到了从他们的 UpdateAction 方法中抛出的间歇性 InvalidOperationException。错误消息是我通常希望在您尝试从不同线程修改 UI 时看到的错误,但只有一个双引号''
,您通常会在其中看到违规控件的名称。
如果这仍然是一个问题,我们将需要向他们重新发布一个固定版本的库,尽管我们已经声明这个错误不会以任何方式影响他们的工作标记(因为它似乎是我们代码中的一个缺陷) .
据我所知,学生必须在更新运行时关闭表单,并且他们正在修改的控件在更新线程停止之前被处理掉,即看起来控件已变为空。奇怪的是它是多么间歇性,有些学生从来没有遇到过这个问题,而有些学生却一直有这个问题。在我为课程作业开发模型解决方案或开发库本身的过程中,我从未亲自遇到过它。
所以我的问题是,在表单生命周期的哪个阶段,它上面的控件会被处理掉,因此最好将停止更新线程的代码放在哪里?目前这段代码是在表单 Dispose 方法中,它会更好地放在其他地方吗?