2

私が作業しているWindowsフォームはサブスクライブしてMicrosoft.Win32.SystemEvents.PowerModeChangedおり、フォーム上でメソッドをSuspend実行します。Close()その上で、初期ロード時と同じように関数をResume実行します。Run()問題は、コンピューターがスリープモードから復帰すると、PowerModeChangedイベントが「.NetSystemEvents」という名前のワーカースレッドでトリガーされ、Run()呼び出されると、メインスレッドではなくこのワーカースレッドでフォームが再作成されることです。

このフォームは、私が別の開発者から継承したプロジェクトであり、Windowsフォームプログラミングは初めてです。フォームを閉じてウェイク時にフォームを再作成するよりも、スリープ/ウェイクプロセスを処理するためのより良い方法や、作成をメインスレッドに強制する方法があるかどうか疑問に思っています。注:コードを削除して、コンピューターがスリープ状態(一時停止)のときに何も実行せず、ウェイクアップ(再開)時に何も実行しない場合、プログラムは正常に動作し続けます(メインスレッドで実行)。どんな助けでもありがたいです。皆さんありがとう。

4

1 に答える 1

4

UI スレッドの SynchronizationContext を静的フィールドにキャプチャし、そのPost()上で UI スレッドに戻ります。

于 2012-05-15T21:19:42.167 に答える