0

アプリケーションと外部サービス間の接続を管理するサーバー アプリケーションでコンポーネントを構築しています。私のコンポーネントは、サーバーが利用できないことを検出し、サービスが利用可能になるまでバックグラウンド スレッドを開始してから、「動作中」状態に再び入ります。

私の問題は、このスレッドの実行中にコンポーネントを呼び出すプロセスが終了すると、スレッドが終了するまでアプリケーションが終了しないことです。基本的に、このサービスが利用可能な場合、私のアプリケーションはシャットダウンできません。

私の質問: バックグラウンド スレッドが終了できるように、アプリケーションが閉じようとしているかどうかを検出する方法はありますか? AppDomain クラスでいくつかのイベントに気付きましたが、どの条件とどの環境でそれらが発生するかはわかりません。

これは低レベルのコンポーネントであるため、実行中の環境について何も知られたくありません。また、高レベルのコンポーネントからシャットダウン中であることを伝える必要もありません。

このコンポーネントは、WCF サービスと Windows サービス アプリケーションの両方で使用され、WinForm クライアント アプリからのテストも行っています。

4

2 に答える 2

1

下位レベルで物事を処理する必要がある場合は、コンポーネントがアプリケーションの終了イベントを監視する必要があるかもしれません。このコードは、プロセスの終了を監視するために使用されます。(誰かがタスク マネージャーからタスクの終了を実行した場合にも機能します。)

Process MyMonitoredProcess = null;
private void Form1_Load(object sender, EventArgs e) 
{
    Process[] p = Process.GetProcessesByName("processName", "machineName");
    if (p.Length > 0)
    {
        MyMonitoredProcess = p[0];
        MyMonitoredProcess.EnableRaisingEvents = true;
        MyMonitoredProcess.Exited += TestProcessEndedEvent;
    } 

}

private void TestProcessEndedEvent(object sender, System.EventArgs e)
{
    // Tasks to be done if application closes.
} 

お役に立てれば。

于 2009-05-22T04:03:15.217 に答える