C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

処理中画面のGIF画像・プログレスバーが動きません

[トピック内 2 記事 (1 - 2 表示)]  << 0 >>

■87012 / inTopicNo.1)  処理中画面のGIF画像・プログレスバーが動きません
  
□投稿者/ TS44 (1回)-(2018/04/07(Sat) 08:37:56)

分類:[.NET 全般] 

.NET Framework4.5 C# Win10 64bit
お世話になります。

Form1で処理をしている間、Form2を呼び出して(show)、処理中のメッセージを表示させているのですが、
Form1の処理が重すぎるせいか、Form2のGIF画像・プログレスバーが動きません。
並行処理をしたいのですが、上手くいきません。

引用返信 編集キー/
■87013 / inTopicNo.2)  Re[1]: 処理中画面のGIF画像・プログレスバーが動きません
□投稿者/ 魔界の仮面弁士 (1621回)-(2018/04/07(Sat) 09:21:25)
No87012 (TS44 さん) に返信
> Form1で処理をしている間、Form2を呼び出して(show)、処理中のメッセージを表示させているのですが、
> Form1の処理が重すぎるせいか、Form2のGIF画像・プログレスバーが動きません。

画面の描画は基本的に、他の処理が実行されていないときに行われます。

ですから Form や コントロールのそれぞれのイベントなどは、
いずれもごく短時間で完了するように設計せねばなりません。

https://blogs.msdn.microsoft.com/nakama/2009/03/30/part-1-windows/
》 UI を全くフリーズさせないためには、メッセージループから呼び出されるイベントハンドラで、
》 時間のかかる処理(具体的には 0.1 sec 以上かかる処理)を行わないようにすればよい。


> 並行処理をしたいのですが、上手くいきません。

どうしても時間のかかる処理がある場合には、処理の流れを見直して、
プログラムを再設計する必要があります。

たとえば 〜Asnyc 系メソッドを有しているクラスを使うようにするとか、
あるいは Task や BackgroudWorker を利用するなどして、
時間のかかる処理をワーカースレッドに担当させるようにするとか。

一つの長い処理があるのではなく、短時間で終わる作業を大量に処理するようなものであれば、
一度にそれを行うのではなく、短い作業に細切れにして、Timer.Tick や Application.Idle などで
定期的あるいは不定期的に少しずつ処理していくようにするとか。
引用返信 編集キー/

このトピックをツリーで一括表示


トピック内ページ移動 / << 0 >>

このトピックに書きこむ