この文書の現在のバージョンと選択したバージョンの差分を表示します。
| 次のリビジョン | 前のリビジョン | ||
|
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()を使う方法 | ||
| - | ```CS | + | ```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(); | ||
| + | } | ||
| + | ``` | ||