2009-04-02 5 views
1

普通のbutton.Clickイベントがあるとします。別のスレッドで何かを実行しているときにUIスレッドがブロックされるのはなぜですか?

このイベントの内部からUI要素にアクセスしようとすると、望ましくない動作が発生したり、例外(デバッグ時)になってしまう可能性があります。このようなシナリオでの通常の例外は、...cannot access UI elements from thread different than they were created inです。

イベントで時間がかかる操作を実行すると、なぜこれがブロックされるのですか?

答えて

3

フレームワークとは何ですか? winform? WPF?

winform(クリックイベントの場合)では、はUIスレッドのです。あなたはです。は、クリックイベントからUIにちょうど話します。何か他のことが起こっているなら、何か間違っている。あなたはタイマーコールバックにいませんか?

より一般的な意味では、InvokeRequired/Invokeなどを使用して、UIスレッドに制御を渡すことができます。

+0

UIスレッドなどで実行されているイベントもありますか? – pkolodziej

+1

イベントのドキュメンテーションを読んでください。ほとんどのUI関連のイベントは、UIスレッドで発生します。不明な場合は、InvokeRequiredをチェックしてください。 –

+0

イベントがUI以外のスレッドで発生した場合、ウィンドウはリフレッシュされませんが、UIスレッドで発生するとイベントが終了するまでウィンドウは再描画されません。 – pkolodziej