簡體   English   中英

WPF C#應用程序在關閉后保持運行幾秒鍾。 這是安全的解決方案嗎?

[英]WPF C# application keeps running for a few seconds after closing. Is this a safe solution?

我有一個帶有關閉按鈕的WPF應用程序,該按鈕調用Application.Shutdown()關閉該應用程序。 窗口關閉,但應用程序繼續運行。 在Visual Studio中可以清楚地看到發生了什么事,但是暫停不再起作用了。

我在這里看到了類似的問題,這促使我嘗試了其他一些解決方案。 我已經嘗試了App.xaml中ShutdownMode的所有選項,但似乎沒有一個起作用。 與Environment.Exit()相同。

顯而易見的原因是線程仍在運行,但是我找不到任何此類線程。

我終於在App.xaml中求助於一個非常簡單的方法:

protected override void OnExit(ExitEventArgs e)
{
    base.OnExit(e);
    Process proc = System.Diagnostics.Process.GetCurrentProcess();
    proc.Kill();
}

這實際上有效,應用程序立即關閉,但是我想知道這是否可能會引起任何問題。

感謝大家的見解。

我今天對此進行了更深入的研究(我會承認有一些幫助),尤其是因為在較早的版本中並未出現此問題,並且該應用程序已經開發了幾年。 因此,追溯到問題最初發生的位置可以提供一些見解。

事實證明,存在一個MediaElement帶有無效源導致了此問題。 在應用程序運行時,使用不存在的文件作為MediaElement的源顯然不會帶來任何問題,但是在關閉時確實會導致它非常慢。 幸運的是,這很容易解決。

進一步挖掘,我發現擁有一個仍在運行的情節提要板也可能會減慢關閉過程的速度,但這僅需兩到三秒鍾。 MediaelEment的問題可能導致超過十秒鍾的延遲。

這樣問題就解決了,但是我的問題,盡管現在是學術性的,還是差不多存在:通過簡單地終止進程來關閉應用程序是一個問題嗎? 那似乎仍然是關閉事情的最快方法。

但是我的問題,盡管現在是學術性的,還是差不多存在:通過簡單地終止進程來關閉應用程序是一個問題嗎?

終止進程是一個壞主意。 在某些情況下這可能是安全的,但是如果您執行任何不允許清除系統擁有資源的操作,則可能會使表格或信號燈和句柄混亂。 最好不斷挖掘,直到發現錯誤為止。 我永遠也不會將proc.kill投入生產,尤其是對於您自己的過程。

如果您知道子進程可以安全地終止,那么也許。 但是,最好用信號通知它關閉,讓它有一段合理的時間,如果您必須殺死它,請以不容忽視的方式進行操作。 然后表現得像只狗骨頭一樣,直到消除根本原因為止,就像您對這種骨頭所做的那樣。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM