一般に、Windows フォームでは、コントロールで .Invalidate() を呼び出すと、コントロール自体が再描画されます (コントロール全体の検証範囲を「ダーティ」に設定し、独自のペイント イベントを非同期で呼び出すことにより)。 -- ペイントを呼び出すだけの場合最初に無効化せずに winform でメソッドを使用すると、以前にダーティとしてマークされた部分のみを再描画できます。Windows は再描画時間を節約するためにDirty Rectangles アプローチを使用するためです。)
うまくいけば、WPF ホスト コントロールで .Invalidate() を呼び出すか、フォーム自体で .Invalidate() を呼び出すことができます (例: "this.Invalidate();")。
フォームでダブル バッファリングを有効にすることも役立つかもしれませんが、これについては確信が持てません。ただし、実験する価値はあります。
上記の@Hasanは答えの一部を提供しました-WindowsメッセージポンプにフックしてWindows電源イベント通知を受け取る方法-しかし、それ自体ではウィンドウが再描画されることはありません(少なくとも私が知る限り)-それはどちらかと言えば、「やあ、あなたが嫌いな問題に直面しようとしているのよ。あなたにはうんざりだ」という通知のようなものです。
したがって、これはおそらく、Hasan のメッセージ ポンプにフックして、「this.Invalidate();」を呼び出すのと同じくらい簡単です。電源イベント通知を受信したとき。その解決策は少しやり過ぎかもしれませんが。
それだけでは不十分な場合は、WPF コントロール自体に Invalidate を指示する必要があるかもしれません...そのメソッドがないため、それはできません。ドキュメントは .InvalidateVisual() が同等であることを示唆していますが、私の経験ではそうではないと信じています。winform のレベルで無効にする以外に、私はあなたを助けることができません。答えを見つけたら、投稿してください!