- 96 名前:デフォルトの名無しさん mailto:sage [2009/04/08(水) 14:17:00 ]
- 現在大体100μs単位で動くタイマーを作成しているのですが、別スレッドからControl.BeginInvokeでコントロールを
操作する際に、そこで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を実行したいのですが…
|

|