How do I update a Label from within a BackgroundWorker thread?

后端 未结 5 1918
慢半拍i
慢半拍i 2020-12-20 06:59

When I used WinForms, I would have done this in my bg_DoWork method:

status.Invoke(new Action(() => { status.Content = e.ToString(); }));
sta         


        
5条回答
  •  时光说笑
    2020-12-20 07:18

    Use the capabilities already built into the BackgroundWorker. When you "report progress", it sends your data to the ProgressChanged event, which runs on the UI thread. No need to call Invoke().

    private void bgWorker_DoWork(object sender, DoWorkEventArgs e)
    {
        bgWorker.ReportProgress(0, "Some message to display.");
    }
    
    private void bgWorker_ProgressChanged(object sender, ProgressChangedEventArgs e)
    {
        status.Content = e.UserState.ToString();
    }
    

    Make sure you set bgWorker.WorkerReportsProgress = true to enable reporting progress.

提交回复
热议问题