2013-12-10 115 views
-4

我使用C#作爲窗體應用程序。我的問題是,窗體關閉後,無法在任務管理器上停止?窗體關閉錯誤

我的代碼:

private void Form3_FormClosing(object sender, FormClosingEventArgs e) 
{ 
    DialogResult dr = MessageBox.Show("Gerçekten programı kapatmak istiyor musunuz?", "Closing event", MessageBoxButtons.YesNo); 

    if (dr == DialogResult.No) 
     e.Cancel = true; 
    else 
     e.Cancel = false; 
} 

像這樣:

http://u1312.hizliresim.com/1j/b/vdbqd.png

+0

可能會有一些非後臺線程正在運行 - 這將阻止應用程序退出。你可能需要研究這些。附上一個調試器,看看錶單關閉後是否有線程仍在運行。 – sthotakura

回答

2

關閉表單並不意味着您的應用程序將終止。
Form3_FormClosing只是做它所說的:它關閉一個表單。如果您打開其他表單,應用程序將不會終止。

private void Form3_FormClosing(object sender, FormClosingEventArgs e) 
{ 
    DialogResult dr = MessageBox.Show("Gerçekten programı kapatmak istiyor musunuz?", "Closing event", MessageBoxButtons.YesNo); 

    if (dr == DialogResult.No) 
     e.Cancel = true; 
    else 
     // Here's what you need. 
     Application.Exit(); 

     //or Environment.Exit() but not recommended would just kill the process. If some form has e.g. unsaved changes it would not have any chances to ask the user if he wants to save them. Also resources (database connections etc.) could not be released properly, files might not be flushed etc. 

     //Environment.Exit() 
} 
+0

所以thx的傢伙。它的運行;) – user3088739

+3

爲什麼你需要在FormClosing中調用'Application.Exit()'?這沒有意義。我沒有失望,但我沒有得到這個答案。我也不太瞭解這個問題。 –

+0

由於簡單的原因形式是一個form3,這意味着它不是主要的明確?因此,應用程序正在運行另一個表單,因此他應該調用application.exit –

0

如果Form3實例是你的主要形式,這意味着如果Application.Run()被稱爲與Form3一個實例,然後一般過程將退出在關閉該表單。

如果Form3不是您的主要形式,則表示主窗體已隱藏,未關閉。


我看到一個程序仍然潛伏在背後的另一個原因是由於自定義的前景線程。

Thread t = new Thread(someMethodWithALoop); 
t.Start(); 

如果此線程正在運行,進程將不會退出。您可以通過將該線程標記爲背景來解決它。

Thread t = new Thread(someMethodWithALoop); 
t.IsBackground = true; 
t.Start(); 

但是,如果你有這樣的一些代碼,一個更好的做法是使用一個Timer