に消えません'処理が終了します。それは一種のアーティファクトを残し(実際には、あなたはまだそれの後ろの空の曲面を持っていた箱の一部を見ることができます。リストボックスは完全に私はこれを行う簡単な方法を持っている非表示
私は「doSomethingの」コメントアウトした場合、それは速やかに消失する。
方法上の任意のアイデアこの問題を解決するために?それはちょうど少し醜いです。doSomethingのような
に消えません'処理が終了します。それは一種のアーティファクトを残し(実際には、あなたはまだそれの後ろの空の曲面を持っていた箱の一部を見ることができます。リストボックスは完全に私はこれを行う簡単な方法を持っている非表示
私は「doSomethingの」コメントアウトした場合、それは速やかに消失する。
方法上の任意のアイデアこの問題を解決するために?それはちょうど少し醜いです。doSomethingのような
searchResultsBox.Hide()を呼び出した後this.refresh()を呼び出すことができます。
音がプロセスの集中とそれがdoSomethingのを実行する前に、リストを隠して仕上げないと、なぜ、わからないGUIのスレッドをブロックしている。
私はdoSomethingのを入れてみます別のスレッドに転送します。
doSomethingは実行に1秒かかりますが、GUIコントロールが更新されて別のスレッドに悲しいことはありません。あなたは正しいです - それは奇妙な行動です。 – ChristianLinnell
これを別のスレッドで実行するだけで、コントロールを更新する必要がなくなります。もしそうであれば、Invoke()を使ってコントロールをGUIスレッドに戻して変更することができます。 –
個別のスレッドまたはバックグラウンドのワーカープロセスが最善の答えです。また、Application.DoEvents()を呼び出すこともできます。それはこの特定の問題のために時にはうまくいくようですが、私はその呼び出しを頻繁に使用することに賛成ではありません。
イベント処理コードの実行中にUIがフリーズする原因となるため、GUIイベントスレッドで重大な作業を行うべきではありません。すでに実行中の別のスレッドに作業を知らせるか、またはその場で新しいスレッドを開始することによって、別のスレッドで長時間実行されているタスクを実行することをお勧めします。
合意しましたが、動作はわずか50msの待ち時間で検出可能です。 – ChristianLinnell
ビンゴ。フォームオブジェクトに対してRefreshメソッドが見つかりませんでしたので、見逃しました。ありがとうございました。 – ChristianLinnell
問題がないと指摘されているように、GUIのスレッドにクイック・ストールを修正するにはリフレッシュが便利ですが、doSomething()に時間がかかる場合は別のスレッドに入れてください。 – gcahill