私はbackgroundworkerを使用して、ループ内で重い作業を完了するためにループの計算時間を表示しています。Backgroundworkerを使用してLabel.textが更新されていません
namespace WindowsFormsApplication3
{
public partial class Form1 : Form
{
Stopwatch StopWatch_Summary = new Stopwatch();
BackgroundWorker xBackgroundWorker = new BackgroundWorker();
Label xLabel = new Label();
public Form1()
{
InitializeComponent();
xBackgroundWorker.WorkerReportsProgress = true;
xBackgroundWorker.DoWork += xbackgroundWorker_DoWork;
xBackgroundWorker.ProgressChanged += xbackgroundWorker_ProgressChanged;
xLabel.Text = "XXXXXXXXXXXXX";
HeavyComputation();
}
private void xbackgroundWorker_DoWork(object sender, DoWorkEventArgs e)
{
while (true)
{
xBackgroundWorker.ReportProgress(0);
System.Threading.Thread.Sleep(1000);
if (!StopWatch_Summary.IsRunning)
{
break;
}
}
}
private void xbackgroundWorker_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
TimeSpan timeSpan = StopWatch_Summary.Elapsed;
xLabel.Text = String.Format("Time : {0:00}:{1:00} sec", timeSpan.Minutes, timeSpan.Seconds);
}
private void HeavyComputation()
{
StopWatch_Summary.Start();
xBackgroundWorker.RunWorkerAsync();
//for(int i=1;i<=MyX;i++)
//{
//Heavy Computation that takes 38seconds to compute
//}
StopWatch_Summary.Stop();
}
}
}
ラベルが更新されているかどうかを確認するためにxLabel.Text = "XXXXXXXXXXX"を割り当てました。私はループの期間中にラベルが "XXXXXXXXXXX"のままであり、ループが終了するまでただ更新することを知りました。およそ38秒後にxLabel.Text = "時間:00:38秒"。どのように私はこれを修正することができます。その後、
は、あなたは、単に使用して自分で解決することができ、このものではありませんいくつかのブレークポイントと一緒にデバッガ? –
@Set UIスレッドで呼び出される 'ProgressChanged'イベントを正しく使用しているので、重複していません。 –
私は "xbackgroundWorker_ProgressChanged"にブレークポイントを入れようとしましたが、そこに1回しか行きませんでした。 – Vincent