C#のプログレスバーと処理を同期する方法
C#では、BackgroundWorker コンポーネントを使用してプログレス バーとアプリケーションを同期させることができます。以下に簡単な例を示します。
まず、デザインビューでBackgroundWorkerコンポーネントをフォームに配置します。
次に、下記のコードをコードに追加します。
using System;
using System.ComponentModel;
using System.Windows.Forms;
namespace ProgressBarDemo
{
public partial class MainForm : Form
{
private BackgroundWorker backgroundWorker;
public MainForm()
{
InitializeComponent();
// 初始化BackgroundWorker组件
backgroundWorker = new BackgroundWorker();
backgroundWorker.WorkerReportsProgress = true;
backgroundWorker.DoWork += backgroundWorker_DoWork;
backgroundWorker.ProgressChanged += backgroundWorker_ProgressChanged;
backgroundWorker.RunWorkerCompleted += backgroundWorker_RunWorkerCompleted;
}
private void startButton_Click(object sender, EventArgs e)
{
// 启动BackgroundWorker组件
backgroundWorker.RunWorkerAsync();
}
private void backgroundWorker_DoWork(object sender, DoWorkEventArgs e)
{
// 在这里执行耗时操作
for (int i = 0; i <= 100; i++)
{
// 报告进度
backgroundWorker.ReportProgress(i);
// 模拟耗时操作
System.Threading.Thread.Sleep(100);
}
}
private void backgroundWorker_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
// 更新进度条的值
progressBar.Value = e.ProgressPercentage;
}
private void backgroundWorker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
// 耗时操作完成后的处理
MessageBox.Show("操作完成!");
}
}
}
上記のサンプルでは、startButton をクリックすると、時間のかかる処理を実行するための BackgroundWorker コンポーネントが起動します。DoWork イベント ハンドラーでは、ReportProgress メソッドを使用して進捗状況を報告します。ProgressChanged イベント ハンドラーでは、進行状況バーの値を更新します。RunWorkerCompleted イベント ハンドラーでは、時間のかかる処理完了後の処理を実行します。
そうしたら、プログレスバーが進行に同期するよ。