集中的な操作中にポップアップする複数のフォームがあります。たとえば、ユーザーに何かを要求するフォームがポップアップ表示され、ユーザーが [OK] をクリックすると、フォームが閉じられても、フォームのグラフィックはメイン画面に残ります。
これらのグラフィックが完全に消えるようにするにはどうすればよいですか? アプリケーションを一時停止するために使用System.Threading.Thread.sleep(10)
していますが、画面が停止し、変化が明確ではありません。私は何をすべきか?
集中的な操作中にポップアップする複数のフォームがあります。たとえば、ユーザーに何かを要求するフォームがポップアップ表示され、ユーザーが [OK] をクリックすると、フォームが閉じられても、フォームのグラフィックはメイン画面に残ります。
これらのグラフィックが完全に消えるようにするにはどうすればよいですか? アプリケーションを一時停止するために使用System.Threading.Thread.sleep(10)
していますが、画面が停止し、変化が明確ではありません。私は何をすべきか?
閉じられたフォームの「グラフィックス」は、ウィンドウメッセージを処理できない下層のウィンドウでフォームが閉じられている限り、表示されたままです (特に再描画の場合)。
これを回避するには、子フォームを閉じた後に呼び出す必要がありますApplication.DoEvents()
(これは WinForms でのみ機能し、通常は推奨されません)。または、メッセージ ポンプをブロックするコードを別のスレッドに配置する必要があります。アプリケーションの応答性を維持したい場合は、aBackgroundWorker
または aを強くお勧めします。Task
についても同様ですThread.Sleep(10)
。これにより、現在の (UI) スレッドがメッセージを処理するのがブロックされるため、ウィンドウはその間応答しません。