2010-01-12 2 views
1

Visual Studio를 사용하여 C#/WPF 응용 프로그램을 개발 중입니다. 이 응용 프로그램은 com 포트를 사용하고 나면 종료합니다. 디버거를 사용하여이 응용 프로그램을 자주 실행하고 중지합니다. 때로는 com 포트가 이미 사용 중임을 나타내는 디버그 세션을 시작할 때 예외가 발생합니다.Visual Studio 2008 devenv 실행중인 응용 프로그램, 유령 떠나는

코드는 종료 할 때 항상 열려있는 COM 포트를 닫습니다. 그래서 누가 포트를 잡고 있었는지 보려면 portmon을 실행했습니다. "정상적인"경우에는 포트가 응용 프로그램 (포트 몬에서 Process KaleidoscopeApp)에 의해 점유, 사용 및 종료된다는 것이 밝혀졌습니다. 포트가 해제되지 않은 경우, 포트는 Visual Studio 자체 인 프로세스 "devenv"에 의해 사용됩니다.

왜 이러한 경우에 devenv가 com 포트의 소유자입니까? 내가 애플 리케이션을 닫을 때, 왜 그것을 계속 보유합니까? Visual Studio를 닫을 때만 포트가 해제됩니다. 특히 Visual Studio 내에서 디버거가 중단되어 이상한 동작입니다.

다음은 com 포트에 대한 액세스를 보여주는 portmon 캡처입니다. 일반적인 세션은 IRP_MJ_CREATE로 시작하고 IRP_MJ_CLOSE로 끝나는 것을 볼 수 있습니다. KaleidoscopeApp의 경우 항상 그렇습니다. 마지막 비트가 devenv에 의해 실행되는 것을 볼 수 있습니다. 그러나 각 시작은 항상 VS 디버거에 있습니다.


357 0.11112275 KaleidoscopeApp IRP_MJ_CREATE serial4라고 SUCCESS 옵션 : 열기
358 0.00000305 KaleidoscopeApp IOCTL_SERIAL_GET_PROPERTIES serial4라고 SUCCESS
...

406 0.02997366 KaleidoscopeApp IRP_MJ_CLEANUP serial4라고 SUCCESS
407 0.03390231 KaleidoscopeApp IRP_MJ_CLOSE serial4라고 SUCCESS
408 0.11443431 KaleidoscopeApp IRP_MJ_CREATE Serial4 SU CCESS 옵션 : 열기
409 0.00000727 KaleidoscopeApp IOCTL_SERIAL_GET_PROPERTIES serial4라고 성공
...

457 0.02995160 KaleidoscopeApp IRP_MJ_CLEANUP serial4라고 성공
458 0.03389956 KaleidoscopeApp IRP_MJ_CLOSE serial4라고 성공
459 0.11307261으로 Devenv.exe IRP_MJ_CREATE serial4라고 SUCCESS 옵션 : 열기
460 0.00000185 devenv.exe IOCTL_SERIAL_GET_PROPERTIES Serial4 SUCCESS

501 35.55274341으로 Devenv.exe IOCTL_SERIAL_WAIT_ON_MASK serial4라고는 어떤 통찰력을 감상 할 수있다


를 취소했습니다!

+0

나는이 문제를 가지고 있지만 파일을 가지고있다. 그것은 디버거 환경과 관련이 있지만 확실하지 않습니다. – AaronLS

+0

그것은 "그 자체로 고정 된"상황 이었습니까? 설정을 변경했는지 기억합니까? – BabaBooey

+0

이것은 너무 기괴합니다.DataReceived 이벤트 처리기에서 Invoke()를 사용하면 SerialPort.Close()가 매우 교착 상태에 빠지기 쉽습니다. 최소한 교착 상태를 제거하고 Close()를 호출하지 마십시오. 꼭 필요한 것은 아닙니다. –

답변

1

VS2008과 VS2010을 사용하여 지난 주에 똑같은 문제가 발생했습니다. 해결 방법 중 하나는 솔루션 폴더에서 .suo 파일을 삭제하는 것입니다.

VS가이를 수행하고 있으며 .suo 파일에 저장되는 이유는 무엇입니까? 나는 모른다 ...