17

C#を使用して.netでWindowsフォームアプリケーションを作成しています。

コンピューターがスリープ状態および/または休止状態になったときにプログラムが実行されている場合(現時点では、どちらか、または両方が問題の原因かどうかはわかりません)、マシンが再びウェイクアップしたときに問題が発生します。プログラムがハングするだけです。それを終了する唯一の方法は、タスクマネージャからプロセスを強制終了することです。

これは明らかな理由で、私がプログラムを機能させたい方法ではありません。これらの状態になったときにプログラムをシャットダウンしただけでも問題ありませんが、これを行う方法や、これを処理するためのより適切な方法があるかどうかはよくわかりません。

4

3 に答える 3

9

必要なもの:

using Microsoft.Win32;   

そして、これはコードです:

 void SystemEvents_PowerModeChanged(object sender, PowerModeChangedEventArgs e)
    {
        if(e.Mode == PowerModes.Suspend)
        {
            this.GracefullyHandleSleep();
        }
    }

これは私が行ったものです。

于 2010-08-16T19:25:55.380 に答える
6

これらのイベントを処理することで回避できる場合があります。しかし、この種の回避策を適用する前に、OS が休止状態になったときにアプリケーションが何をしていたかを理解しようとしました。

アプリケーションがちょうどアイドル状態だったのに、ハングアップが発生しましたか?

アプリケーションは、中断されてはならないある種の低レベルの作業 (デバイス ドライバーまたは外部ハードウェアとの通信) を実行していますか?

アプリケーションは何らかのネットワーク接続を使用しますか?

于 2010-08-06T16:27:10.447 に答える
2

この記事では、これらのイベントのリッスンについて説明します。WndProcをオーバーライドして PBT_APMSUSPEND イベントをリッスンするなどの操作を行う必要があります。

于 2010-08-06T15:56:57.343 に答える