我最近设置一些课程对于他们不得不使用提供给他们一个小的和相对简单的C#库的一些本科生。这个库的主要目的是为了显示其由着色网格(它们可以操纵)的简单形式,多个按钮,并与一些文本的标签。

它们延伸的类提供了许多他们必须执行的抽象方法,其中之一称为UpdateAction和以设定的间隔被自动调用。

我还没有遇到以下问题自己,但在实验室一些学生遇到了间歇性出现InvalidOperationException从他们UpdateAction方法中被抛出时,他们关闭自己的形式。该错误消息是我通常希望看到当您尝试从不同的线程修改UI,但目前只有一个双引号''那里你平常见到的违规控件的名称错误。结果 如果这仍然是一个问题,我们需要重新发放图书馆的一个固定的版本,它们虽然我们已经说过,这个错误不会影响他们的工作标志着以任何方式(因为它似乎是在我们的代码中的缺陷)

据我可以告诉学生必须在该更新运行的这样一个点被关闭的形式,他们正在修改的控制得到设置在更新线程停止前即出现的控制已成为空的。奇怪的是它是多么间歇性的,一些学生从未有过的问题,而另一些则不断有它。我从来没有亲自遇到了它在我的课程模式解决方案的开发或开发库本身。

所以我的问题是在什么时候在形式的生命周期都在它的控制功能可以设置的,因此这里将是最好把那个停止更新线程的代码?目前这个代码是在形式处置方法,将它最好放在其他地方?

有帮助吗?

解决方案

你是如何停止线程?你确定你关闭此窗口之前将其停止?您应该确保您的线程循环设置一个标志停止。然后,您必须等待线程退出。

主题

while (running)
{
    // thread stuff
}

表格

thread.running = false; // or use your own Stop() method that does the same thing
thread.Join();

如果你想有一个响应系统,您需要确保线程能够获得停止信号很短的时间内退出。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top