我们有很大的问题: 我们必须使用Invoke从线程更新表单上的数据。但是当更新太快时,用户关闭目标表单然后我们总是收到错误消息,因为更新关闭。我们尝试了很多方法来避免这种情况但没有运气。输出代码如下:
object[] paramList = ((IThreadUpdatableUI)_target).GetData();
if (_target.Handle != null)
_target.Invoke(new UpdateUIDelegated(((IThreadUpdatableUI)_target).UpdateUI),
new object[] { paramList });
if (!Started || ((IThreadUpdatableUI)_target).NeedToStop())
break;
Thread.Sleep(_inteval);
请帮助。 我们在VS2005中使用C#
答案 0 :(得分:1)
在调用窗口之前,您应检查NeedToStop条件,如果表单已关闭,则无需更新任何内容。只需确保NeedToStop条件在表单关闭之前返回true,例如在FormClosing事件处理程序中。
通过这样做,您可以确保线程在表单关闭之前终止。
答案 1 :(得分:0)
终止form.OnClosing上的更新线程,或者在关闭之前取消注册该委托。
答案 2 :(得分:0)
在引发事件之前检查空引用异常。
如果没有表单,则事件将为null,因此不要引发该事件。