多分、複数のスレッドを使用していますか?バックグラウンドスレッドをシャットダウンしないと、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();
}
}
。定期的に退出を確認し、アプリがシャットダウンしたら正常に終了します。
注:スレッドのバックグラウンドプロパティをtrueに設定すると、自動的に終了しますが、そうすると、終了時にスレッドが実行している命令を制御することができなくなるため、任意の種類のクリーンアップを実行します。独自のチェックをコード化するのが最善です。
質問とは何が関係していますか?実際、私は毎日午前2時に再開したいと思っています。 – Brad
なぜ重要なのですか?そして、私は、ほとんどの人が最初に思うことが気になります。 –
@ブラッド - 理由は重要です(ここでの他の質問と同様に)時には、根本的な問題を解決して表面問題を解決することができます。質問は完全に正当なものですが、実際の回答ではなくコメントに投稿している可能性があります。 – AllenG