c # Недопустимая исключительная операция при закрытии формы - PullRequest
1 голос
/ 02 августа 2011

Я создал простую форму, которая создает два класса A и B. Класс A запускает поток, который генерирует событие и каждую секунду. Класс B подписывается на это событие и обновляет метку. Код выглядит примерно так:

класс А ...

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 голосов
/ 02 августа 2011

Просто проверьте, если форма IsDisposed при проверке InvokeRequired, и все должно быть в порядке:

public delegate void MyEventHandler(string text);
void IncomingEvent(string text)
{
   if(!IsDisposed && InvokeRequired)
       Invoke(new MyEventHandler(IncomingEvent), text);
   else
       label.Text = text;
}
0 голосов
/ 02 августа 2011

Если это действительно так, попробуйте свойство 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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...