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

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

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

Re[3]: 処理中、フォーム上にアニメーションを動かしたい


(過去ログ 92 を表示中)

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

■54833 / inTopicNo.1)  処理中、フォーム上にアニメーションを動かしたい
  
□投稿者/ ミキティ (1回)-(2010/11/04(Thu) 12:39:23)

分類:[VB.NET/VB2005 以降] 

こんにちは。
時間のかかる処理を行っている時に、フォーム上にアニメーションを表示させたいのですが、
フォーム上のPictureboxにアニメーションgifを設定しても、処理の間はアニメーションが動きません。
(フォームが固まる感じ)
通常状態でフォーム上Pictureboxにアニメーションgifを設定した場合はアニメーションが動きます。
どのようにすれば処理中にアニメーションが動くようになるでしょうか?
VB2008です。
引用返信 編集キー/
■54834 / inTopicNo.2)  Re[1]: 処理中、フォーム上にアニメーションを動かしたい
□投稿者/ shu (150回)-(2010/11/04(Thu) 12:58:53)
No54833 (ミキティ さん) に返信
> こんにちは。
> 時間のかかる処理を行っている時に、フォーム上にアニメーションを表示させたいのですが、
> フォーム上のPictureboxにアニメーションgifを設定しても、処理の間はアニメーションが動きません。
> (フォームが固まる感じ)
> 通常状態でフォーム上Pictureboxにアニメーションgifを設定した場合はアニメーションが動きます。
> どのようにすれば処理中にアニメーションが動くようになるでしょうか?
> VB2008です。
処理中に適宜、Picturebox.Refreshを実行するか別スレッドにするか、別プロセスにするなど。DoEvents
という方法もありますが使わない方がいいです。
引用返信 編集キー/
■54835 / inTopicNo.3)  Re[1]: 処理中、フォーム上にアニメーションを動かしたい
□投稿者/ 魔界の仮面弁士 (1913回)-(2010/11/04(Thu) 13:26:55)
No54833 (ミキティ さん) に返信
> どのようにすれば処理中にアニメーションが動くようになるでしょうか?
> VB2008です。

フォームに BackgroundWorker を貼り付けて、時間のかかる処理を
その BackgroundWorker で行うようにしてみてください。
引用返信 編集キー/
■54839 / inTopicNo.4)  Re[2]: 処理中、フォーム上にアニメーションを動かしたい
□投稿者/ ミキティ (2回)-(2010/11/05(Fri) 09:41:40)
shuさま、魔界の仮面弁士さま、ご回答ありがとうございました。

No54835 (魔界の仮面弁士 さん) に返信
> ■No54833 (ミキティ さん) に返信
>>どのようにすれば処理中にアニメーションが動くようになるでしょうか?
>>VB2008です。
>
> フォームに BackgroundWorker を貼り付けて、時間のかかる処理を
> その BackgroundWorker で行うようにしてみてください。

そこで、魔界の仮面弁士さまにアドバイス頂いた、BackgroundWorkerというものを使用して、
色々と調べた結果、以下のようにやってみました。
・処理に必要なパラメータを構造体にして、BackgroundWorker.RunWorkerAsyncの引数に設定
・DoWorkイベントで処理を実行
・BackgroundWorker.IsBusyの間ループを回す
 その間、System.Windows.Forms.Application.DoEvents()を実行しながら該当PictureboxをRefreshする
とりあえず、これで、少しは画面が固まるような時間がありますが、何とかアニメーションを動かすことに成功しました。
ありがとうございました。
解決済み
引用返信 編集キー/
■54840 / inTopicNo.5)  Re[3]: 処理中、フォーム上にアニメーションを動かしたい
□投稿者/ よねKEN (628回)-(2010/11/05(Fri) 10:25:29)
No54839 (ミキティ さん) に返信
> ・BackgroundWorker.IsBusyの間ループを回す
>  その間、System.Windows.Forms.Application.DoEvents()を実行しながら該当PictureboxをRefreshする

IsBusyの間まわしているというループがどういうものかわかりませんが、
この引用部分の処理は不要のように思います。
少なくともBackgroundWorkerを使うのであれば、
Application.DoEventsとPicturebox.Refreshは不要なはずです。
引用返信 編集キー/
■54841 / inTopicNo.6)  Re[3]: 処理中、フォーム上にアニメーションを動かしたい
□投稿者/ 魔界の仮面弁士 (1914回)-(2010/11/05(Fri) 10:41:26)
No54839 (ミキティ さん) に返信
> ・DoWorkイベントで処理を実行
> ・BackgroundWorker.IsBusyの間ループを回す

IsBusy で処理ループを回さないでください。
代わりに、RunWorkerCompleted で処理完了を得るようにします。


たとえば、

 『RadioButton1 が選択されたら、Label1 に "TEST" と表示』

という処理を実装する場合、CheckedChanged イベントを使いますよね。

 Private Sub RadioButto1_CheckedChanged(……
  If RadioButto1.Checked Then
   Label1.Text = "TEST"
  End If
 End Sub

これをループ処理で

 Do Until RadioButton1.Checked
  Application.DoEvents()
 Loop
 Label1.Text = "TEST"

と書いたりはしないと思いますが、それと同じことです。

引用返信 編集キー/


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

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -