この文書の現在のバージョンと選択したバージョンの差分を表示します。
両方とも前のリビジョン 前のリビジョン 次のリビジョン | 前のリビジョン | ||
c.sharp:非同期_プログレスバー [2018/02/22 13:36] fifi |
c.sharp:非同期_プログレスバー [2018/04/24 12:03] (現在) fifi |
||
---|---|---|---|
ライン 1: | ライン 1: | ||
- | [時間のかかる処理の進行状況を表示する - .NET Tips (VB.NET,C#...)](https://dobon.net/vb/dotnet/programing/displayprogress.html) | + | # [時間のかかる処理の進行状況を表示する - .NET Tips (VB.NET,C#...)](https://dobon.net/vb/dotnet/programing/displayprogress.html) |
- Update()を使う方法 | - Update()を使う方法 | ||
- | ``` | + | ```c |
//ProgressBar1の値を変更する (非同期がデフォルト) | //ProgressBar1の値を変更する (非同期がデフォルト) | ||
ProgressBar1.Value = i; | ProgressBar1.Value = i; | ||
ライン 23: | ライン 23: | ||
-- ユーザーがキャンセルできるようにする | -- ユーザーがキャンセルできるようにする | ||
+ | |||
+ | # 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(); | ||
+ | } | ||
+ | ``` |