Что вызывает исключение ObjectDisposeException из SerialPort при отладке winform .NET?

StackOverflow https://stackoverflow.com/questions/290583

Вопрос

Vista SP1 Visual Studio 2008 SP1 .NET 3.5 SP1 C#

У меня есть приложение winforms, с которым я играю, которое использует объект SerialPort в качестве частной переменной.Когда приложение скомпилировано и выполнено, оно работает отлично.Он также работает в режиме отладки без каких-либо точек останова.В 90% случаев, когда я останавливаюсь на точке останова и пытаюсь выполнить код, я получаю диалоговое окно «Произошло необработанное исключение» со следующими подробностями:

System.ObjectDisposedException был нездоровым сообщением = "Safe Harder был закрыт" Source = "mscorlib" objectName = "" stacktrace:at microsoft.win32.win32native.setevent (Hafewaithandle Handle) At System.Threading.EventWaithandle.Set () at System.io.ports.serialStream.Asyncfscallback (uint32 Errorcode, Uint32 Necbytes, CatheroverLed* Poverlaked) at System.threading. RecomerioCOpplitionCallBack (UINT32 ERRORCODE, UINT32 NUMBYTES, NativeOverlapped* Poverlap) Innerexception:

Разочаровывает то, что мне не нужно переступать через код, связанный с последовательным портом!мне просто нужно было сделать что-нибудь с портом.Итак, я могу прочитать строку, манипулировать ею, сложить два числа вместе, что угодно, а затем БАХАТЬ.

Опять же, это прекрасно работает, когда НЕ отладка или отладка без каких-либо точек останова.Кажется, что-то есть в остановке на точке останова, которая заставляет CLR размещать SerialStream в другом потоке.

В Интернете много разговоров о проблемах с обновлением USB-устройств, вызывающих это.Но я использую встроенный порт материнской платы COM1.

Я не думаю, что у меня была эта проблема в .NET 2.0, поэтому мне, возможно, придется вернуться к этому...

Мне нужно немного упростить приложение, прежде чем я смогу публиковать код - но видел ли кто-нибудь подобное поведение в отладчике раньше?

Спасибо!

Это было полезно?

Решение

У меня была такая же проблема только сегодня утром.Удивительно, но он просто исчез, когда я ОТКЛЮЧИЛ следующие параметры в VS2008 Tools->Options->Debugging->General:

  • «Включить помощник по исключениям»
  • «Включить пошаговое выполнение исходного кода .NET Framework»
  • «Перейти через свойства и операторы»
  • «Включить оценку свойств и другие неявные вызовы функций»

Понятия не имею, почему, но у меня это сработало.

Другие советы

Возможно, ваш порт закрывается операционной системой, поскольку он не получает ответ от вашего приложения (он остановлен на точке останова).

Ну, я не уверен, что это ответ, но определенно что-то было в этом проекте. Первоначально он был написан в 2.0 и преобразован в 3.5 по VS2008. Я создал новый проект в C # -Express 2008, добавляя оригинальные классы один за другим, и теперь он работает как шарм! Понятия не имею, что отличается.

У меня это тоже есть. Это должно быть какая-то ошибка с отладчиком. Приведенный выше совет сработал: отключите параметр " Включить оценку свойства и другие неявные вызовы функций. & Quot;

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

У меня была та же проблема, и я сделал следующее:

serialPortLock = Monitor.TryEnter(serialPort, 3000);
Thread.Sleep(5);
serialPort.Write(msg, 0, msg.Length);

и то же самое для моего Чтения (). Похоже, это хороший обходной путь для меня!

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top