2

通常はWindowsXPで動作する.NET2.0ソフトウェアがあります(Windowsの「クラシック」モードで構成され、ベルやホイッスルはありません)。今、私はそれをWindows7で完全に実行しています。Windows 7で私が気付いているのは、レイアウト内のラベルとレイアウトがぎっしり詰まった特定のパネルは、パネルが無効になると、あらゆる種類のOnPaintイベントを生成することです。それだけでなく、後続のOnPaint呼び出しは、現在実行中のOnPaint呼び出しを中断するようです。ウィンドウのメッセージキューからメッセージをプルオフし、それを完了まで処理してから、次のメッセージをプルオフするスキームはどうなりましたか?

レイアウトを構成するためにOnPaintメソッドを使用することがあります。これが、追加のOnPaintイベントを生成している可能性がありますが、少なくとも現在のOnPaintメソッドを実行して、次の呼び出しが行われる前に完了することはできませんか?発生しているこの再入可能性を防ぐために、さまざまなチェックをコードに散らかす必要があります。

これは、クラシックモードで実行されているWindows XPでは問題ではありませんが、完全な栄光で実行されているWindowsXPでは問題になる可能性があります。

4

1 に答える 1

3

レイアウトを構成するためにOnPaintメソッドを使用することがあります。

レイアウトを「構成」(変更)すると、コントロールが無効になります。Paintイベント/メソッドは、何かを変更するのに適切な場所ではありません。ペイントするだけです。

しかし、少なくとも現在のOnPaintメソッドを実行して、次の呼び出しが行われる前に完了することはできませんか?

PaintがInvalidateを引き起こさない場合(そしてそうすべきではない場合)、これは自動的に行われます。その場合、修正する必要のあるバグがあります。

于 2013-01-10T14:34:47.977 に答える