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

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

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

Re[4]: マルチスレッドの使用法?


(過去ログ 99 を表示中)

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

■59293 / inTopicNo.1)  マルチスレッドの使用法?
  
□投稿者/ おう (1回)-(2011/05/20(Fri) 15:57:06)

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

2011/05/25(Wed) 15:43:53 編集(投稿者)
VS2008 WindowsXP を使用しています。

2つの画面があります。
@1つはファイル集計をしている画面です。
Aもうひとつが、進行状況を表示する画面です。

1つ目の処理をしていると同時にAの進行状況も更新したいです。

引用返信 編集キー/
■59297 / inTopicNo.2)  Re[1]: マルチスレッドの使用法?
□投稿者/ 魔界の仮面弁士 (2176回)-(2011/05/20(Fri) 16:52:51)
No59293 (おう さん) に返信
> 2つの画面があります。
> @1つはファイル集計をしている画面です。
> Aもうひとつが、進行状況を表示する画面です。
画面は 2 つありますが、バックグラウンド処理は 1 つだけという状況ですか?

画面や処理が幾つあったとしても、基本的な流れは
 「ProgressChanged イベントで進捗画面を更新する」
で変わらないと思います。


> 1つ目の処理をしていると同時にAの進行状況も更新したいです。
「1つ目の処理」ということは、2つ目、3つ目の処理もあるという事でしょうか。
だとしたら、1つ目と2つ目は同時並行で処理されるのでしょうか。
それとも、2つ目は1つ目の終了後に行われるのでしょうか。
引用返信 編集キー/
■59298 / inTopicNo.3)  Re[2]: マルチスレッドの使用法?
□投稿者/ ツつィツつ、 (1回)-(2011/05/20(Fri) 16:56:22)
2011/05/20(Fri) 17:03:08 編集(投稿者)

言葉足らずですみません。

分かりやすくまとめます。

画面は全部で2つあります。
1つは、普通の処理をする画面です。
もう1つが、処理中に1つ目の画面の上に表示されている画面です。

まずは、簡単に言いますと。
1つの画面で処理中にもう一つの画面が表示されます。
処理が終わるともうひとつの画面が閉じます。
引用返信 編集キー/
■59299 / inTopicNo.4)  Re[3]: マルチスレッドの使用法?
□投稿者/ おう (2回)-(2011/05/20(Fri) 17:03:44)
上記の私です。
名前が文字化けしました。
引用返信 編集キー/
■59302 / inTopicNo.5)  Re[3]: マルチスレッドの使用法?
□投稿者/ 魔界の仮面弁士 (2177回)-(2011/05/20(Fri) 18:19:23)
No59298 (おう さん) に返信
>>> 処理しながらAを更新するためには、どうしたらよろしいでしょうか。

もしかして、ProgressBar や BackgroundWorker について知りたいわけでは無く、
モードレスフォームの扱いが分からないという事なのでしょうか。


> 1つの画面で処理中にもう一つの画面が表示されます。
> 処理が終わるともうひとつの画面が閉じます。
こういう感じで良いのでしょうか。

あとは、処理中にフォームの×ボタンを押された場合にどうするかとか、
Form1 上のデータを Form2 に渡す処理が必要があるのかどうかなど、
細かい制御を組み込む必要はあるでしょうけれども。


'--- Form2 (処理中画面) ---
 Private Sub Form2_Shown(…
  BackgroundWorker1.RunWorkerAsync(処理パラメータ)
 End Sub

 Private Sub BackgroundWorker1_DoWork(…
  Dim bgw As BackgroundWorker = DirectCast(sender, BackgroundWorker)
  Dim arg = CType(e.Argument, 何某)
  Do Until …
   'If bgw.CancellationPending Then
   ' Return
   'End If
     :
   bgw.ReportProgress(進捗パーセント, 状態データ)
     :
  Loop
  e.Result = 結果
 End Sub

 Private Sub BackgroundWorker1_ProgressChanged(…
  '進捗表示
  ProgressBar1.Value = e.ProgressPercentage
 End Sub

 Private Sub BackgroundWorker1_RunWorkerCompleted(…
  If e.Error IsNot Nothing Then
   MsgBox("エラー:" & e.Error.Message, MsgBoxStyle.Critical)
  'ElseIf e.Cancelled Then
  ' MsgBox("中止", MsgBoxStyle.Exclamation)
  Else
   Dim result As 何某 = CType(e.Result, 何某)  '処理結果
   MsgBox("完了")
   Me.Close()
  End If
 End Sub



'--- Form1 (メイン画面) ---
 '=== Form2 をモーダル表示する場合 ===
 'Private Sub Button1_Click(…
 ' Using SubForm As New Form2()
 '  SubForm.ShowDialog()
 ' End Using
 'End Sub

 '=== Form2 をモードレスで表示させる場合 ===
 Private WithEvents SubForm As Form2
 Private Sub Button1_Click(…
  Button1.Enabled = False
  SubForm = New Form2()
  SubForm.Show(Me)
 End Sub
 Private Sub SubForm_FormClosing(…
  Button1.Enabled = True
 End Sub

引用返信 編集キー/
■59424 / inTopicNo.6)  Re[4]: マルチスレッドの使用法?
□投稿者/ ツδ渉δ・email (1回)-(2011/05/25(Wed) 15:44:54)
2011/05/25(Wed) 15:45:29 編集(投稿者)

ありがとうございました。
そのプログラムで動きました!!
解決済み
引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -