4

Main 関数が終了した後、終了コード 1 を返す必要があります。しかし、私には決して終わらない別のスレッドがあります(while(true))だから私はEnvironment.Exit(1)を呼び出すことができました。しかし、comオブジェクトを破棄するときに例外が発生しました...

いくつかの理由で、他のスレッド コードを変更できません。あなたは何をすることを提唱しますか?

com オブジェクトの破棄による例外をキャッチできますか? 終了コードを返すための他のオプションはありますか?

4

3 に答える 3

1

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);
于 2009-05-25T09:25:51.000 に答える
0

このコードを書くことでプロセスを強制終了できますDimmyProcessAs System.Diagnostics.Process = System.Diagnostics.Process.GetCurrentProcess()myProcess.Kill()

またはEnvironment.exit(1)は、すべてのプロセスを強制終了するための最良の方法です

http://www.zhakkas.com/affiliates/idevaffiliate.php?id=542

于 2009-07-30T13:34:49.797 に答える
0

使用してみてください:

Environment.ExitCode = 1;

でも; 他のスレッドがバックグラウンド スレッドでない場合は、プロセスを終了するために終了する必要があります (終了コードは、プロセスが終了するまで意味がありません)。

于 2009-05-25T09:16:54.417 に答える