以封闭形式调用委托时出现问题

时间:2010-06-04 10:45:14

标签: c#

我们有很大的问题: 我们必须使用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#

3 个答案:

答案 0 :(得分:1)

在调用窗口之前,您应检查NeedToStop条件,如果表单已关闭,则无需更新任何内容。只需确保NeedToStop条件在表单关闭之前返回true,例如在FormClosing事件处理程序中。

通过这样做,您可以确保线程在表单关闭之前终止。

答案 1 :(得分:0)

终止form.OnClosing上的更新线程,或者在关闭之前取消注册该委托。

答案 2 :(得分:0)

在引发事件之前检查空引用异常。

如果没有表单,则事件将为null,因此不要引发该事件。