[時間のかかる処理の進行状況を表示する - .NET Tips (VB.NET,C#...)](https://dobon.net/vb/dotnet/programing/displayprogress.html)

snippet.c
//ProgressBar1の値を変更する (非同期がデフォルト)
ProgressBar1.Value = i;
//Label1のテキストを変更する
Label1.Text = i.ToString();
 
//Label1を再描画する
Label1.Update();
//(フォーム全体を再描画するには、次のようにする)
//this.Update();

BeginInvoke

snippet.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();
        }