任何機會,你使用多個線程?如果你不關閉後臺線程,它們將保持你的進程運行,即使通過調用Application.Restart。
我粘貼了下面的一些代碼來演示這種行爲。要查看它,請使用下面的代碼編譯一個測試項目並運行它。 (您需要在窗體上放置1個按鈕,並指定我在下面的代碼中定義的點擊處理程序)。
啓動任務管理器,轉到進程選項卡,並確保將PID(進程ID)列添加到視圖。
每次單擊該按鈕時,應用程序都會重新啓動,但您應該會看到舊進程仍然掛在內存中(由於後臺線程未關閉)。
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
// start a background thread that will never be exited.
System.Threading.Thread thread = new System.Threading.Thread(delegate() { while (true) System.Threading.Thread.Sleep(1000); });
thread.Start();
}
private void button1_Click(object sender, EventArgs e)
{
Application.Restart();
}
}
假設這是你的問題,糾正它是把某種支票到您的後臺線程(甚至一個bool標誌將做)的最佳方式。讓他們定期檢查退出,並在應用程序關閉時正常退出。
注意:您可以將線程的背景屬性設置爲true,並且它會自動退出,但如果這樣做,則無法控制線程退出時執行哪條指令,因此您可以'執行任何類型的清理。最好編寫自己的支票。
這與問題有什麼關係?事實是我想每天凌晨2點重新開始。 – Brad 2009-06-30 13:52:35