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

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

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

Re[4]: RunWorkerAsync(100)をForm_Loadで


(過去ログ 30 を表示中)

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

■14452 / inTopicNo.1)  RunWorkerAsync(100)をForm_Loadで
  
□投稿者/ ぽん他 (6回)-(2008/02/19(Tue) 08:04:19)

分類:[.NET 全般] 

お世話になってます。C#初心者のぽん他です。

また質問させて下さい。

BackgroundWorkerを勉強してます。
 ↓参考にしました。
http://www.atmarkit.co.jp/fdotnet/dotnettips/436bgworker/bgworker.html

form1から、form2を ShowDialog(this); で開くと同時に
Form2_LoadでbgWorker.RunWorkerAsync(100);を実行すると、
動くときと、動かない時があります。
ボタンのクリックで行うと必ず動作します。
#動くとき→0〜100%までプログレスバーが進む。
#動かない時→0%のまま・・・

初心者ですみません。そういうものなのでしょうか?
また、フォームを開くと同時に動かすようなことは
できるのでしょうか?(ボタン操作では無くて)

すみません、よろしくお願いします

 ↓ここでも質問しています。
http://www.ailight.jp/BBS/Default.aspx

引用返信 編集キー/
■14455 / inTopicNo.2)  Re[1]: RunWorkerAsync(100)をForm_Loadで
□投稿者/ ぽん他 (7回)-(2008/02/19(Tue) 08:53:08)

Form_Shown(object sender, EventArgs e)

で実行したら上手く動いているようです。
これでよいのでしょうかぁ・・・

Load は、終ってから表示されるんですね。


No14452 (ぽん他 さん) に返信
> お世話になってます。C#初心者のぽん他です。
>
> また質問させて下さい。
>
> BackgroundWorkerを勉強してます。
>  ↓参考にしました。
> http://www.atmarkit.co.jp/fdotnet/dotnettips/436bgworker/bgworker.html
>
> form1から、form2を ShowDialog(this); で開くと同時に
> Form2_LoadでbgWorker.RunWorkerAsync(100);を実行すると、
> 動くときと、動かない時があります。
> ボタンのクリックで行うと必ず動作します。
> #動くとき→0〜100%までプログレスバーが進む。
> #動かない時→0%のまま・・・
>
> 初心者ですみません。そういうものなのでしょうか?
> また、フォームを開くと同時に動かすようなことは
> できるのでしょうか?(ボタン操作では無くて)
>
> すみません、よろしくお願いします
>
>  ↓ここでも質問しています。
> http://www.ailight.jp/BBS/Default.aspx
>
引用返信 編集キー/
■14456 / inTopicNo.3)  Re[2]: RunWorkerAsync(100)をForm_Loadで
□投稿者/ ぽん他 (8回)-(2008/02/19(Tue) 09:03:17)
すみません。
適当なことを書いてしまいました。

頻度は少ないんですが、やはりたまにスタートしませんでした
Form_Shown でも。

ん・・・少し時間を取ってからスタート???

自己れすですみません。


No14455 (ぽん他 さん) に返信
>
> Form_Shown(object sender, EventArgs e)
>
> で実行したら上手く動いているようです。
> これでよいのでしょうかぁ・・・
>
> Load は、終ってから表示されるんですね。
>
>
> ■No14452 (ぽん他 さん) に返信
>>お世話になってます。C#初心者のぽん他です。
>>
>>また質問させて下さい。
>>
>>BackgroundWorkerを勉強してます。
>> ↓参考にしました。
>>http://www.atmarkit.co.jp/fdotnet/dotnettips/436bgworker/bgworker.html
>>
>>form1から、form2を ShowDialog(this); で開くと同時に
>>Form2_LoadでbgWorker.RunWorkerAsync(100);を実行すると、
>>動くときと、動かない時があります。
>>ボタンのクリックで行うと必ず動作します。
>>#動くとき→0〜100%までプログレスバーが進む。
>>#動かない時→0%のまま・・・
>>
>>初心者ですみません。そういうものなのでしょうか?
>>また、フォームを開くと同時に動かすようなことは
>>できるのでしょうか?(ボタン操作では無くて)
>>
>>すみません、よろしくお願いします
>>
>> ↓ここでも質問しています。
>>http://www.ailight.jp/BBS/Default.aspx
>>
引用返信 編集キー/
■14458 / inTopicNo.4)  Re[3]: RunWorkerAsync(100)をForm_Loadで
□投稿者/ まどか (447回)-(2008/02/19(Tue) 09:23:16)
この場合、見た目に動作していないように見えることと実際に動作していないことは異なります。
実際に動作しているかは、Console.WriteLineやブレークポイントで確認できます。
見た目ですが、処理が速いと最終結果だけが人間の目で確認できることがよくあります。
その目に見える状態もOSの負荷状況などにより毎回違います。
今回の場合もそういうことだと思います。
確実に進捗状況を提示したいなら、適当なSleepを入れたり、Refreshなどで描画を確実におこなう
などの処理を入れることになります。

Loadはフォームが表示される前のイベントですので、描画すべきウィンドウが存在しません。
なので見た目に何も無いので確認することができないだけです。
Shownは初回表示直後に発生します。
しかし、イベントハンドラが終了するまではGUIスレッドは待機しています。
したがって、そこで書いた描画処理はイベントハンドラが抜けてから処理されます。
それをその場で見た目に反映する場合はRefresh等で強制描画させます。

たぶん、プログレスバーのValueを設定した後でプログレスバー.Refresh()をおこなえば改善されるのではと思います。
引用返信 編集キー/
■14467 / inTopicNo.5)  Re[4]: RunWorkerAsync(100)をForm_Loadで
□投稿者/ ぽん他 (9回)-(2008/02/19(Tue) 13:32:18)
2008/02/19(Tue) 13:32:45 編集(投稿者)
2008/02/19(Tue) 13:32:43 編集(投稿者)

まどかさん

お返事ありがとうございます。

while(jobEndCheck==0){
System.Threading.Thread.Sleep(1000);
this.Refresh();
}



this.Text = e.ProgressPercentage + "%完了";
progressBar1.Value = e.ProgressPercentage;
progressBar1.Refresh();

でなんとんかう上手く動作しています。
ありがとうございました。



No14458 (まどか さん) に返信
> この場合、見た目に動作していないように見えることと実際に動作していないことは異なります。
> 実際に動作しているかは、Console.WriteLineやブレークポイントで確認できます。
> 見た目ですが、処理が速いと最終結果だけが人間の目で確認できることがよくあります。
> その目に見える状態もOSの負荷状況などにより毎回違います。
> 今回の場合もそういうことだと思います。
> 確実に進捗状況を提示したいなら、適当なSleepを入れたり、Refreshなどで描画を確実におこなう
> などの処理を入れることになります。
>
> Loadはフォームが表示される前のイベントですので、描画すべきウィンドウが存在しません。
> なので見た目に何も無いので確認することができないだけです。
> Shownは初回表示直後に発生します。
> しかし、イベントハンドラが終了するまではGUIスレッドは待機しています。
> したがって、そこで書いた描画処理はイベントハンドラが抜けてから処理されます。
> それをその場で見た目に反映する場合はRefresh等で強制描画させます。
>
> たぶん、プログレスバーのValueを設定した後でプログレスバー.Refresh()をおこなえば改善されるのではと思います。
解決済み
引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -