|
分類:[.NET 全般]
VBをつかってマルチスレッド処理のプログラムを作成しました。
MultiProgram_run = New System.Threading.Thread( _ New System.Threading.ParameterizedThreadStart(AddressOf Program_runxx))
MultiProgram_run.IsBackground = True
MultiProgram_run.Start()
のようにして、バックグランドで数値計算を行い、 計算結果を配列に格納し、 BeginInvokeでフォアグラウンド処理に回し、 その配列の結果をChart表示するというものです。
データ点数が少ない時には問題ないのですが データ点数が1万点を超えると、Chartへの反映に時間がかかる(処理が重くなる)ため、 マルチスレッド処理をしているにも拘わらず、 フォームがフリーズしてしまうという現象が起きます。
一つの解決策としては、 バックグランド処理の中で Forループの中の BeginInvokeの頻度を下げるというものです。
もし数値計算処理にかかる時間が毎回同じであれば これでも問題ないのですが パラメータを変えると数値計算にかかる時間がかかるため、 BeginInvokeの頻度が多すぎたり、逆に少なすぎたりしてしまいます。
そのため、フォアグラウンド処理の中で画面更新のために 一休止を入れるようなことをしたいのですが どうすれば良いでしょうか?
まず思いついたのは、Thread.Sleep(1)を入れてみました。 しかしフォアグランド処理が休んでいても画面更新は行われません。
次に、Application.DoEventsを入れてみました。 しかしこれでもフリーズしてしまいます。
一体、どうするのが良いでしょうか?
|