DOBON.NET DOBON.NETプログラミング掲示板過去ログ

時間の掛かる処理中にプログレスバー(Marquee)を動作させる方法

環境/言語:[Windows XP, VB.NET, .NET Framework 4.0]
分類:[.NET]

はじめまして。

処理中にプログレスバー(Marquee)を動作させる方法についてご指導願います。

内容を変更したくないメソッド(=どのくらいの時間で処理が完了するか不明)を実行中に、フォーム上でプログレスバーを動作させたいと考えています。
(当該処理が終わった後にはさらに別の処理が続きます)

普通に考えれば、Application.DoEventsを実行することで、プログレスバー上でメーターが移動するのですが、実際に処理を行うメソッドを改変したくないがため、どのようにプログレスバーを再表示すべきか困っています。

いろいろ検証した結果、別スレッドから定期的にApplication.DoEventsを実行することなども試してみましたが、解決には至りませんでした。

実際にやりたいことのサンプルプログラムは下記の通りです。

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

  ' プログレスバーをマーキーに設定
  Me.ProgressBar1.Style = ProgressBarStyle.Marquee

  ' どれくらいで終わるかわからない処理
  ' この処理を実行中にプログレスバーを動かしておきたい
  ' このメソッドの内容は変えたくない
  TestMethod1()

  ' 完了したらプログレスバーを非表示に設定
  Me.ProgressBar1.Visible = False

  ' 後続の処理
  TestMethod2()

End Sub

みなさんの知恵をお貸しください。

以上、よろしくお願いいたします。
■No30605に返信(tackさんの記事)

はじめまして。こんにちは。

正攻法としては、どの位時間がかかるか分からない処理(TestMethod1メソッド)を別スレッドで行うということになるかと思います。

時間のかかる処理の進行状況を表示する
http://dobon.net/vb/dotnet/programing/displayprogress.html#backgroundworker

のBackgroundWorkerを使用した例を参考にしてみてください。マーキースタイルですと途中経過は必要ありませんので、このサンプル内のBackgroundWorker.ReportProgressメソッドを呼び出す部分は(ProgressChangedイベントハンドラも)必要ありません。
■No30606に返信(管理人さんの記事)

返信遅くなり申し訳ありません。

やはり、対象の処理を別スレッドで実行するのが最良の方法ということですね。

その方法で対応したいと思います。

どうもありがとうございました。
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板