# [時間のかかる処理の進行状況を表示する - .NET Tips (VB.NET,C#...)](https://dobon.net/vb/dotnet/programing/displayprogress.html) - Update()を使う方法 ```c //ProgressBar1の値を変更する (非同期がデフォルト) ProgressBar1.Value = i; //Label1のテキストを変更する Label1.Text = i.ToString(); //Label1を再描画する Label1.Update(); //(フォーム全体を再描画するには、次のようにする) //this.Update(); ``` - BackgroundWorkerを使う方法 -- ユーザーがキャンセルできるようにする - Threadクラスを使用したスレッド化による方法 -- ユーザーがキャンセルできるようにする # BeginInvoke ```c private void button_StartRecording_Click(object _s, EventArgs _e) { StartRecording(); // 開始時に間隔を指定する var timer = new System.Timers.Timer(100/*msec*/); // Elapsedイベントにタイマー発生時の処理を設定する timer.Elapsed += (sender, e) => { try { timer.Stop(); // もしくは timer.Enabled = false; // 何らかの処理 Debug.WriteLine($"rms: {rms}"); progressBar_AudioMeter.BeginInvoke(new Action(() => { //float value = (float)Math.Log10(rms + 0.001); progressBar_AudioMeter.Value = (int)(audioVolumeMax * 100.0); //UIスレッドで実行すべき処理 })); } finally { timer.Start(); // もしくは timer.Enabled = true; } }; // タイマーを開始する timer.Start(); } ```