Форма как-то избавляется

У меня есть клиент-серверное приложение, в котором я использую классические сокеты и потоки для приема / отправки данных и прослушивания клиентов.

Приложение работает нормально, но через некоторое время я получаю исключение ObjectDisposedException:

System.ObjectDisposedException: Cannot access a disposed object.
Object name: 'MainForm'.
   at System.Windows.Forms.Control.MarshaledInvoke(Control caller, Delegate method, Object[] args, Boolean synchronous)
   at System.Windows.Forms.Control.Invoke(Delegate method, Object[] args)
   at System.Windows.Forms.Control.Invoke(Delegate method)

Этот код вызывается из клиентского потока Socket, и я использую метод Invoke() для запуска кода в потоке пользовательского интерфейса.

Я уверен, что я не удаляю форму вручную и не использую Close () (форма закрывается при нажатии пользователем кнопки "Закрыть"), поэтому я не знаю, что может вызвать ее удаление.

Изменить: Исключение не выдается при закрытии формы - это происходит совершенно случайно.

2 ответа

Вы пытались переопределить Dispose метод и поставить точку останова там? Callstack, вероятно, даст вам представление о том, почему / где он находится.

У меня была похожая проблема, я просто скрывал форму и никогда не закрывал ее или не выбрасывал.

Основная причина удаления формы произошла из-за DialogResult кнопки Cancel, которая фактически вынуждала закрытие формы, а затем удаление было неявным.

Чтобы преодолеть это, я просто удалил диалоговое окно DialogResult из формы.

Другие вопросы по тегам