2011-03-18 11 views
2

我已經在不少WPF解決方案上工作過了,這是我第一次看到這個問題。WPF:program.exe不退出「進程無法訪問該文件..被另一個進程使用」

今天它開始間歇性地發生。在關閉我的WPF窗口後,該.exe仍在Visual Studio下運行。

所以我必須手動殺死我的program.exe才能重新編譯。

最初我以爲,因爲我覆蓋了應用程序的開始/退出/異常..但我評論了所有這一切,它仍然在發生。

實際上,我在進程管理器中看到了我的program.exe的多個實例!

無法弄清楚是什麼導致我的exe不退出。是否有任何明確的dipose邏輯,我可以在應用程序退出事件中添加以確保它真的退出?

我的應用程序由單個窗口和多個用戶控件組成。

更新

如果我打開調試模式。並關閉主要的WPF窗口,我的visual studio不停止調試。但是調用堆棧窗口是空的。

+0

在調試器中暫停它,看看它在做什麼。 – SLaks 2011-03-18 19:56:39

+0

調試器當時沒有運行。這是關閉在非調試模式下運行的程序後發生的。 – 2011-03-18 20:08:58

+0

然後你可以附上它。 – SLaks 2011-03-18 20:13:39

回答

1

您可以使用Application.Exit事件來記錄應用程序關閉的時間。

或者,您可以將attach the debugger添加到正在運行的實例中(即使它未在調試器中啓動),然後暫停它以查看它的位置。請務必查看線程工具窗口,因爲您可能會在UI線程之外暫停。

+0

附加到過程和打破應該幫助你弄清楚發生了什麼。 – Nick 2011-03-18 20:31:48

+0

這實際上是一個好主意,謝謝。但是當我暫停時,我得到「No Source Available」「show disassembly」screen .. Call Stack window is empty – 2011-03-18 21:06:55

+0

您應該能夠爲您的發佈版本生成PDB文件,這應該有所幫助。理論上,即使它是一個發佈版本,VS也可以使用它們。轉到項目設置/屬性,生成選項卡,高級按鈕,然後調試信息組合框。 – CodeNaked 2011-03-18 21:32:13

0

這應該照顧它,雖然它可能更好地嘗試找出潛在的問題。

System.Diagnostics.Process.GetCurrentProcess().Kill(); 
+4

這是一個壞主意。 – SLaks 2011-03-18 20:02:53

+0

我從來沒有聲稱這是一個好主意,實際上建議不要這樣做。但它恰好*是一些「我可以在應用程序退出事件中添加的明確的dipose邏輯,以確保它真正退出。」 – ceyko 2011-03-18 20:37:31

相關問題