c#关闭表单时无效操作异常

时间:2011-08-02 18:27:00

标签: c# exception exception-handling

我创建了一个创建两个类A和B的简单表单.A类启动一个每秒触发一次的事件。 B类订阅此活动并更新标签。代码看起来像这样:

A级......

public delegate void MyEventHandler(string text);
public event MyEventHandler MyEvent;
...
int i = 0;
if(MyEvent != null)
  MyEvent(i.ToString());
i++;

B级......

public delegate void MyEventHandler(string text);
void IncomingEvent(string text)
{
  if(InvokeRequired)
    Invoke(new MyEventHandler(IncomingEvent), text);
  else
    label.Text = text;
}

在我尝试关闭表单之前,此代码似乎正常工作。关闭我的Invoke行时会抛出InvalidOperationException。我认为这是因为我的表格在我上一次活动结束前被处理掉了。我显然可以抓住这个例外并把它塞在地毯下,就像从未发生过一样,但我很好奇处理这个问题的正确方法是什么。在此先感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

如果确实处理了,请尝试IsDisposed属性。 (表格扩展控制)

public delegate void MyEventHandler(string text);
void IncomingEvent(string text)
{
  if(IsDisposed)
    return;
  if(InvokeRequired)
    Invoke(new MyEventHandler(IncomingEvent), text);
  else
    label.Text = text;
}

答案 1 :(得分:0)

在检查InvokeRequired时,只需检查表单IsDisposed,一切都应该正常:

public delegate void MyEventHandler(string text);
void IncomingEvent(string text)
{
   if(!IsDisposed && InvokeRequired)
       Invoke(new MyEventHandler(IncomingEvent), text);
   else
       label.Text = text;
}