Форма как-то избавляется - PullRequest
3 голосов
/ 30 мая 2010

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

Приложение работает нормально, но через некоторое время я получаю 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 () (форма закрывается при нажатии пользователем кнопки Close), поэтому я не знаю, что может привести к ее удалению.

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

Ответы [ 2 ]

1 голос
/ 30 мая 2010

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

0 голосов
/ 08 апреля 2013

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

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

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

...