実際にスレッドの実際の進行状況を反映する、wpf で進行状況バーを実装する方法について、太陽の下でリソースを読みました。
注 - **企業の決定により、私は .NET 4 のみに縛られているため、残念ながら新しい技術は自由に使用できません。
これは私がこれまでに試したことです。
私が実行する方法はLoadTable(). 直接実行すると、完了するまでに約 5 秒かかります。で実行すると、BackgroundWorker約 15 秒かかります (直接呼び出すよりも 3 倍長くなります)。
private void bw_DoWork(object sender, DoWorkEventArgs e)
{
BackgroundWorker bg = (BackgroundWorker)sender;
for (int i = 0; i <= 100; i++)
{
// a method that takes time to exceute.
LoadTable();
bg.ReportProgress(i);
}
}
また、独自のスレッドでメソッドを実行しようとしましたが、BackgroundWorker次のように別のスレッドの進行状況バーに報告されます。
private void LoadTable_2()
{
task = Task.Factory.StartNew(new Action(() => LoadTable()));
}
private void bw_DoWork(object sender, DoWorkEventArgs e)
{
LoadTable_2();
BackgroundWorker bg = (BackgroundWorker)sender;
for (int i = 0; i <= 100; i++)
{
Thread.Sleep(i);
bg.ReportProgress(i);
}
}
しかし、この場合、2 つのスレッド間に接続がなく、プログレス バーが 99 まで実行されないようにする方法がなく、LoadTableメソッドを実行する他のスレッドが終了するまでそこで待機します。メソッドの実行の実際の進行状況は報告されません。私の質問は、実行を遅くすることなく実際に進行状況を報告するに
はどうすればよいですか? BackgroundWorkerありがとう!