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

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

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

Re[1]: windouwsアプリで処理中画面表示


(過去ログ 15 を表示中)

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

■5112 / inTopicNo.1)  windouwsアプリで処理中画面表示
  
□投稿者/ ゆっきー (54回)-(2007/07/04(Wed) 17:19:35)

分類:[VB.NET (Windows)] 

環境[VS2005]

お世話になっております。
VB.netでWindowsアプリの画面を作成しています。
メインとなる画面で時間がかかる処理をしている間
処理中画面を表示しようとしています。

ボタンクリック(処理開始)

処理中画面表示(メイン画面では時間がかかる処理を処理中)

処理中画面を消す(処理終了)

という流れです。

処理中画面ではプログレスバーをタイマーで適当に動かします。
(処理が終了とともに100%にするなどはしません)

下記コードで試したのですが
処理開始で処理中画面を表示し、
処理終了で処理中画面を削除はできたのですが、
処理中画面のプログレスバーが動作してくれません。

---------------------------------------------------
メイン画面での処理
Buttonのclickイベント(

'処理中画面表示
dim subForm as new FormSub
subForm.Show()

'時間がかかる処理(仮にスリープ)
System.Threading.Thread.Sleep(5000)

'処理中画面消す
subForm.Close()
)

FormSubでの処理
FormのLoadイベント(

ProgressBar.Minimum = 0
ProgressBar.Maximum = 100
Timer.Enabled = true
)
TimerのTickイベント(

'プログレスバーを適当に動かす
gValue += 1
if gValue = ProgressBar.Maximum then
gValue = 0
end if
Me.ProgressBar.Value = gValue
)
----------------------------------------------------

時間のかかる処理をスリープから
メッセージボックスで"テスト"と表示する処理に変えたら、
処理中画面のプログレスバーが動きました。

-----------------------------------------------------
メイン画面での処理
Buttonのclickイベント(

'処理中画面表示
dim subForm as new FormSub
subForm.Show()

'時間がかかる処理
MsgBox("テスト",MsgBoxStyle.OkOnly,"テスト")

'処理中画面消す
subForm.Close()
)
------------------------------------------------------

何かお分かりになられましたらご教授ください。
お願いいたします。
引用返信 編集キー/
■5114 / inTopicNo.2)  Re[1]: windouwsアプリで処理中画面表示
□投稿者/ ぽぴ王子 (238回)-(2007/07/04(Wed) 17:31:34)
ぽぴ王子 さんの Web サイト
No5112 (ゆっきー さん) に返信

どの辺のレベルから解説すればいいかちょっと悩むところですが…

結論から言うと、メイン画面とプログレスバーを表示している画面が同じス
レッドで動いているからです。

Thread.Sleep() を実行している間はスレッドの動作が止まっている状態に
なります。プログレスバーを表示している画面は Sleep() している画面と同
じスレッドで動いていますから、その画面の動作も一緒に止まってしまいま
す(もちろんタイマーも止まっています)。
MsgBox() に変更すると動くのは、MsxBox を表示した段階でキー入力を受
け付ける状態になっているけれど、スレッド自体は動いている状態なので
そのまま動作し続けているからです。

これを解消するには、プログレスバーに関する処理を別スレッドで動かしま
す(正確にはちょっと違うかもだけど)。
BackgroundWorker などについて調べてみるといいかもしれません。
引用返信 編集キー/
■5115 / inTopicNo.3)  Re[2]: windouwsアプリで処理中画面表示
□投稿者/ ゆっきー (56回)-(2007/07/04(Wed) 18:31:42)
No5114 (ぽぴ王子 さん) に返信
返信ありがとうございます。

> これを解消するには、プログレスバーに関する処理を別スレッドで動かしま
> す(正確にはちょっと違うかもだけど)。
> BackgroundWorker などについて調べてみるといいかもしれません。

別スレッド、BackgroundWorkerなどについてもう少し調べてみます。

引用返信 編集キー/
■5116 / inTopicNo.4)  Re[3]: windouwsアプリで処理中画面表示
□投稿者/ なちゃ (45回)-(2007/07/04(Wed) 18:48:23)
そういう場合は、重い処理の方を別スレッドにするもんです。
引用返信 編集キー/
■5126 / inTopicNo.5)  Re[1]: windouwsアプリで処理中画面表示
□投稿者/ IIJIMAS (7回)-(2007/07/05(Thu) 10:47:23)
No5112 (ゆっきー さん) に返信
とりあえずプログレスバーの表示ということなので、

Application.DoEvents メソッド
http://msdn2.microsoft.com/ja-jp/library/system.windows.forms.application.doevents(VS.80).aspx
はやってみましたか?

参考サイト:
@IT > Insider.NET > .NET TIPS > 時間がかかる処理での「応答なし」を回避するには?
http://www.atmarkit.co.jp/fdotnet/dotnettips/136doevents/doevents.html

DOBON.NET > プログラミング道 > .NET Tips > その他のTips > 時間のかかる処理の進行状況を表示する
http://dobon.net/vb/dotnet/programing/displayprogress.html
引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -