C#, C♯, C#相談室 Part52
■ このスレッドは過去ログ倉庫に格納されています
0096デフォルトの名無しさん
2009/04/08(水) 14:17:00操作する際に、そこでApplication.DoEvensを実行すると、コントロールが壊れる?みたいなのですが、なぜでしょうか?
具体的にいうと、別スレッドでビジーループを回して待機していたタイマーからイベントが飛び、Control.BeginInvokeで
メインスレッドにて登録されたデリゲートを実行するようになっており、デリゲート内にApplication.DoEventsがあると、
別ウインドウで操作していたHScrollBarが壊れ、Dock.FillしていたはずのコントロールがHScrollBar部分をドラッグ
することによりリサイズできてしまう、という具合です。
サンプルプロジェクト:
ttp://www1.axfc.net/uploader/He/so/214358
pass: invoke
サンプルプロジェクトのProcessingWindowのStartボタンをクリックした後、ControlWindowのスクロールバー右を
連打するとスクロールバーが壊れます。
一応メインスレッド上でタイマーのビジーループを回すか、Application.DoEventsを取り除くことにより回避できますが、
前者だと何もしてなくてもCPUを食ってしまうし、後者だと重い処理を行っているときにUIの更新ができなくなってしまう
のでできれば別スレッドからBeginInvokeしたときにApplication.DoEventsを実行したいのですが…
■ このスレッドは過去ログ倉庫に格納されています