Main 関数が終了した後、終了コード 1 を返す必要があります。しかし、私には決して終わらない別のスレッドがあります(while(true))。だから私はEnvironment.Exit(1)を呼び出すことができました。しかし、comオブジェクトを破棄するときに例外が発生しました...
いくつかの理由で、他のスレッド コードを変更できません。あなたは何をすることを提唱しますか?
com オブジェクトの破棄による例外をキャッチできますか? 終了コードを返すための他のオプションはありますか?
ProcessExitイベントにアタッチして、最後のチャンスのクリーンアップを実行するか、または...スレッドを実行して終了する前に終了できるようにすることをお勧めします。
AppDomain.CurrentDomain.ProcessExit +=
delegate(object sender, EventArgs e)
{
Console.WriteLine("Process Exit");
};
Thread t1 = new Thread(new ThreadStart(delegate
{
try
{
while (true)
{
Console.WriteLine("test 1");
Thread.Sleep(500);
}
}
finally
{
Console.WriteLine("Terminating t1");
}
}));
Thread t2 = new Thread(new ThreadStart(delegate
{
try
{
while (true)
{
Console.WriteLine("test 2");
Thread.Sleep(500);
}
}
finally
{
Console.WriteLine("Terminating t2");
}
}));
t1.Start();
t2.Start();
Thread.Sleep(2000);
t2.Abort();
t2.Join();
Environment.Exit(1);
このコードを書くことでプロセスを強制終了できますDimmyProcessAs System.Diagnostics.Process = System.Diagnostics.Process.GetCurrentProcess()myProcess.Kill()
またはEnvironment.exit(1)は、すべてのプロセスを強制終了するための最良の方法です
使用してみてください:
Environment.ExitCode = 1;
でも; 他のスレッドがバックグラウンド スレッドでない場合は、プロセスを終了するために終了する必要があります (終了コードは、プロセスが終了するまで意味がありません)。