BackgroundWorker
投稿者 haru  (中学生)
投稿日時
2011/5/14 13:37:46
こんにちは、BackgroundWorker1もBackgroundWorker2があり、両方とも動作していないときにテキストボックスに”動作なし”と表示するには どうしたら良いのでしょうか?ご指導ください。お願いいたします
投稿者 魔界の仮面弁士  (社会人)
投稿日時
2011/5/14 14:37:32
> 両方とも動作していないときに
片方だけなら判定できるということでしょうか?
もし仮に、TextBox1 が BackgroundWorker1 の状態、TextBox2 が BackgroundWorker2 の状態を
それぞれ表示させているのだとして、TextBox3 に両者の動作状況を表すとすれば、たとえば
If TextBox1.Text = "動作なし" AndAlso TextBox2.Text = "動作なし" Then
TextBox3.Text = "動作なし"
Else
のようなコードで処理できることになりますね。
> 両方とも動作していないときに
簡易的には、
If BackgroundWorker1.IsBusy = False AndAlso BackgroundWorker2.IsBusy = False Then
TextBox1.Text = "動作なし"
というコードで判断できるかと思います。
# 上記だけだと、BackgroundWorker1.IsBusy を調査してから BackgroundWorker2.IsBusy を
# 調査するまでの僅かな時間でステータスが変わってしまった場合に正しく判定されませんけれども。
それを踏まえたうえで、TextBox の表示はどのタイミングで変わるのかを考えてみてください。
それぞれの BackgroundWorker が処理中になるのは、haru さんが RunWorkerAsync を
実行した時ですし、完了するのは、RunWorkerCompleted イベントが発生したタイミングですよね。
なので、それらのタイミングで TextBox の内容を差し替えるための処理判定を行えば良いかと。
片方だけなら判定できるということでしょうか?
もし仮に、TextBox1 が BackgroundWorker1 の状態、TextBox2 が BackgroundWorker2 の状態を
それぞれ表示させているのだとして、TextBox3 に両者の動作状況を表すとすれば、たとえば
If TextBox1.Text = "動作なし" AndAlso TextBox2.Text = "動作なし" Then
TextBox3.Text = "動作なし"
Else
のようなコードで処理できることになりますね。
> 両方とも動作していないときに
簡易的には、
If BackgroundWorker1.IsBusy = False AndAlso BackgroundWorker2.IsBusy = False Then
TextBox1.Text = "動作なし"
というコードで判断できるかと思います。
# 上記だけだと、BackgroundWorker1.IsBusy を調査してから BackgroundWorker2.IsBusy を
# 調査するまでの僅かな時間でステータスが変わってしまった場合に正しく判定されませんけれども。
それを踏まえたうえで、TextBox の表示はどのタイミングで変わるのかを考えてみてください。
それぞれの BackgroundWorker が処理中になるのは、haru さんが RunWorkerAsync を
実行した時ですし、完了するのは、RunWorkerCompleted イベントが発生したタイミングですよね。
なので、それらのタイミングで TextBox の内容を差し替えるための処理判定を行えば良いかと。
投稿者 haru  (中学生)
投稿日時
2011/5/14 16:44:14
早々にありがとうございました。またよろしくお願いします