2010-01-12 26 views
1

我正在開發一個使用Visual Studio的C#/ WPF應用程序。此應用使用com端口,然後在退出時釋放它。我正在使用調試器來運行並經常停止這個應用程序。有時候,當啓動一個調試會話時,我發現一個異常,說明com端口已被使用。Visual Studio 2008 devenv正在運行應用程序,然後離開ghost

該代碼總是在出口處關閉開放的COM端口,所以我運行portmon來查看誰持有該端口。事實證明,在「正常」的情況下,端口被我的應用程序抓取,使用和關閉(在Portmon中的Process KaleidoscopeApp)。在端口未被釋放的情況下,該端口正被Visual Studio本身的進程「devenv」使用。

爲什麼在這些情況下devenv com端口的所有者?當我關閉應用程序時,它爲什麼繼續保留它?只有當我關閉Visual Studio是發佈的端口。這是奇怪的行爲,特別是因爲調試器在Visual Studio中特別停止。

這是從portmon捕獲顯示訪問com端口。您可以看到一個典型的會話以IRP_MJ_CREATE開頭,以IRP_MJ_CLOSE結束。 KaleidoscopeApp始終如此。你可以看到最後一位由devenv運行。然而,每次啓動總是在VS調試器中。


357 0.11112275 KaleidoscopeApp IRP_MJ_CREATE Serial4成功選項: 打開
358 0.00000305 KaleidoscopeApp IOCTL_SERIAL_GET_PROPERTIES Serial4成功
...

406 0.02997366 KaleidoscopeApp IRP_MJ_CLEANUP Serial4成功
407 0.03390231 KaleidoscopeApp IRP_MJ_CLOSE Serial4成功
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成功選項: 打開
460 0.00000185 devenv.exe IOCTL_SERIAL_GET_PROPERTIES Serial4 SUCCESS
...

501 35.55274341 devenv.exe的IOCTL_SERIAL_WAIT_ON_MASK Serial4取消


任何有識之士將不勝感激!

+0

我有這個相同的問題,但與文件,而不是。它與調試器環境有關,但我不確定。 – AaronLS 2010-01-12 18:50:38

+0

這是一個「它固定自己」的情況嗎?記得如果你改變了任何設置? – BabaBooey 2010-01-12 19:29:59

+0

這有點奇怪。當您在DataReceived事件處理程序中使用Invoke()時,SerialPort.Close()很容易出現死鎖。至少消除可能的死鎖,只是不要調用Close()。這不是必要的。 – 2010-01-12 20:00:53

回答

1

我上個星期在VS2008和VS2010上遇到了同樣的問題。解決此問題的一種方法是從解決方案文件夾中刪除.suo文件。

VS爲什麼這樣做,爲什麼它存儲在.suo文件中?我不知道...

相關問題