2011-01-14 88 views
1

私は2つのコントロールを持つフォームを持っています。コントロール1にはいくつかの検索条件があり、ユーザーはボタンをクリックして検索を開始できます。コントロール2には、検索結果を表示するGridViewがあり、アニメーションGifを含むPictureBoxもあります。処理中にWinForms PictureBoxアニメーションGIFが一時停止しないようにしますか?

コントロール1には、完了までに5分以上かかるネストされたforeachループが含まれています(検索条件に依存しますが、ほとんどの場合即座に終了します)。

何が起こるかは、ピクチャボックスが表示され、アニメーションGIFが実行を開始するコントロール2のメソッドを呼び出すことです。 foreachループがヒットするとすぐに、画像が完全に停止します。メッセージボックスを表示するたびに、イメージが再び実行されます(私は、MessageBoxがブロックされているためです)。 MessageBoxが閉じられると、イメージのアニメーションが停止します。

私はスレッディングで何かを利用する必要があると思いますが、私が試みていること(ImageAnimator、ThreadはInvokeなどを呼び出すメソッドを呼び出す)はすべて動作していないようです。この作品を制作するためには、どのようなイベント/ライブラリが必要ですか?どのような良い例が続く?

答えて

8

長時間実行しているコードはGUIスレッドで実行され、内部メッセージループがブロックされるため、GUIは停止します。長い実行コードを別のワーカースレッドで実行してみてください。

+0

ロジックの切り替えが完全に機能しました。私は独自のスレッドにBlockingコードを入れたり、PictureBoxの描画をスレッドに入れたりすることについては考えていませんでした。 – Brandon

2

2ワード:BackgroundWorkerクラス。 http://msdn.microsoft.com/en-us/library/waw3xexc.aspx

+2

「BackgroundWorkerクラス」は2ワードです) –

+0

参考に感謝します。これと、ループをBackgroundWorkerに移すというcodymanixの考えの間に、私はそれを働かせることができました。 – Brandon

関連する問題