4

無限ループで実行されているバックグラウンドスレッドを持つサービス(ユーザーがログインし、グラフィカルユーザーインターフェイスを備えている場合にのみ使用されます)ではなく、C#Windowsフォームアプリケーションを作成しました。

しかし、Windows(7)をシャットダウンしようとすると、プログラムがシャットダウンまたはログオフを妨げていると表示され、強制的にシャットダウンするかどうかを尋ねられます。

さて、私のプログラムがWindowsを終了またはログオフしようとしていることに気付く(ハンドラーを取得する)可能性はありますか?

したがって、私が必要としているのは、Windowsが終了しようとしたときにアプリケーションに認識させることです。

前もって感謝します。

編集:素晴らしいアドバイスをありがとう!CANCELイベントハンドラーがある場合、フォームを閉じるイベントでアイデアを使用することは可能ですか?

4

4 に答える 4

10
public Form1()
{
    InitializeComponent();

    this.FormClosing += new FormClosingEventHandler(Form1_FormClosing);
}

void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
    // Or any of the other reasons suitable for what you want to accomplish
    if (e.CloseReason == CloseReason.WindowsShutDown)
    {
        //Stop your infinite loop
    }
}
于 2010-03-23T08:42:50.753 に答える
5

あなたはそのスレッドを「バックグラウンドスレッド」と呼んでいますが、それはありIsBackground = true;ますか?
システムは、停止するスレッドのみを停止します。

于 2010-03-23T08:43:03.283 に答える
2

シナリオでは、キャプチャコンソールの出口C#も使用できるはずです。

それとは別に、スレッドをバックグラウンドスレッドとして設定するだけで十分でしょうか?

于 2010-03-23T08:35:37.383 に答える
1

Microsoft.Win32.SystemEvents.SessionEndingイベントを見てください。

于 2010-03-23T08:37:38.417 に答える