.net winform을 디버깅하는 동안 Serialport에서 ObjectDisparedeXception의 원인은 무엇입니까?

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

문제

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

Serialport 객체를 개인 변수로 사용하는 Winforms 앱이 있습니다. 응용 프로그램이 컴파일되고 실행되면 훌륭하게 작동합니다. 또한 모든 중단 점에서 디버그 모드에서 작동합니다. 중단 점에서 멈추고 코드를 진행하려고 시도하는 시간의 90%는 다음과 같은 세부 사항과 함께 '처리되지 않은 예외'대화 상자를 얻습니다.

System.ObjectDisposedException은 처리되지 않은 메시지 = "안전 핸들이 닫혔습니다"소스 = "MSCORLIB"ObjectName = ""StackTrace : at Microsoft.Win32Native.Setevent (SafeWaithAndle Hands)에서 System.EventWaithAndle.set ()에서 System에서. io.ports.serialstream.asyncfscallback (UINT32 ErrorCode, UINT32 Numbytes, NativeOverlapped* poverlapp) systread._iocompletionCallback.performiocompletionCallback (UINT32 ERRERCODE, UINT32 NumbyTes, FortaverLapped* Poverlap)

실망스러운 점은 일련 관련 코드를 밟을 필요가 없다는 것입니다! 난 그냥해야 했어 무엇 포트와 함께. 그래서 나는 문자열을 읽고, 문자열을 조작하고, 두 개의 숫자를 함께 추가 한 다음, 쾅 할 수 있습니다.

다시 말하지만, 이것은 디버깅하지 않거나 브레이크 포인트를 wihtout 할 때 제대로 작동합니다. CLR이 다른 스레드에서 SerialStream을 처리하게하는 중단 점에서 중지하는 것에 대해 무언가가있는 것 같습니다.

온라인으로 채터가 많이 있습니다. 그러나 COM1에서 빌드 인 마더 보드 포트를 사용하고 있습니다.

.NET 2.0 에서이 문제가 있다고 생각하지 않으므로 다시 돌아 가야 할 수도 있습니다.

코드를 게시하기 전에 응용 프로그램을 약간 단순화해야합니다. 그러나 이전에 디버거에서 이와 같은 행동을 본 사람이 있습니까?

정말 고마워!

도움이 되었습니까?

해결책

나는 오늘 아침에 같은 문제가있었습니다. 놀랍게도, VS2008 도구-> 옵션-> 디버깅-> 일반 :>의 다음 옵션을 비활성화했을 때 단순히 사라졌습니다.

  • "예외 보조원 활성화"
  • ".NET 프레임 워크 소스 스텝핑 활성화"
  • "속성과 운영자를 넘어서"
  • "속성 평가 및 기타 암시 적 기능 호출 활성화"

왜 그런지 모르겠지만, 그것은 나를 위해 효과가있었습니다.

다른 팁

아마도 당신의 포트가 응용 프로그램으로부터 응답을 얻지 못하므로 OS에 의해 폐쇄되고있을 것입니다 (중단 점에서 중지 됨).

글쎄, 나는 이것이 대답인지 확실하지 않지만 그 프로젝트에 대해 확실히 무언가가있었습니다. 원래 2.0으로 작성되었으며 VS2008에 의해 3.5로 변환되었습니다. C#-Express 2008에서 원래 클래스를 하나씩 추가하여 새로운 프로젝트를 만들었고 지금은 매력처럼 작동합니다! 무엇이 다른지 모릅니다.

나도 이것을 가지고있다. 이것은 디버거가있는 일종의 버그 여야합니다. 위의 조언은 효과가있었습니다 : "재산 평가 활성화 및 기타 암시 적 기능 호출"을 비활성화합니다.

직렬 I/O를 수행하는 속성이있는 클래스가 있습니다. 마우스를 마우스 위로 가져갈 때 디버거가 유용하게 속성 값을 표시하려고했을 것이라고 생각했습니다. 따라서 디버거 스레드에서 IO를 수행합니다. 그러나 그것은 사실이 아닌 것 같습니다. 나는 원인이 무엇인지 정말로 확신하지 못합니다.

나는 같은 문제가 있었고 다음을 수행했습니다.

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

그리고 내 read ()에 대해서도 마찬가지입니다. 나에게 좋은 해결 방법 인 것 같습니다!

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top