C#BackgroundWorker未报告进度

C#BackgroundWorker未报告进度,c#,backgroundworker,C#,Backgroundworker,我的应用程序中的后台工作程序不报告进度。(已设置断点,但从未到达该断点)。我使用的代码附在下面。我已经为此工作了几个小时了,我被难住了。“通常怀疑”(设置WorkerReportsProgress的布尔值,并将事件链接到_ProgressChanged,忘记调用.RunWorkerAsyn())已被选中)我很困惑为什么从未到达断点 public partial class Form1 : Form { BackgroundWorker bw_copyToTemp; //Defined

我的应用程序中的后台工作程序不报告进度。(已设置断点,但从未到达该断点)。我使用的代码附在下面。我已经为此工作了几个小时了,我被难住了。“通常怀疑”(设置WorkerReportsProgress的布尔值,并将事件链接到_ProgressChanged,忘记调用.RunWorkerAsyn())已被选中)我很困惑为什么从未到达断点

public partial class Form1 : Form
{
    BackgroundWorker bw_copyToTemp;  //Defined as a member of the class

    private void btnCopyToTemp_Click(object sender, EventArgs e)
    {

       bw_copyToTemp = new System.ComponentModel.BackgroundWorker
       {
           WorkerReportsProgress = true,
           WorkerSupportsCancellation = true
       };
       bw_copyToTemp.DoWork += bw_copyToTemp_DoWork;
       bw_copyToTemp.ProgressChanged += bw_copyToTemp_ProgressChanged;
       bw_copyToTemp.RunWorkerCompleted += bw_copyToTemp_RunWorkerCompleted;


       // Start background worker
       bw_copyToTemp.RunWorkerAsync();
    }

    void bw_copyToTemp_ProgressChanged(object sender,System.ComponentModel.ProgressChangedEventArgs e)
    {
        CurrentState s = (CurrentState)e.UserState;  //<<BREAKPOINT HERE NOT HIT
        toolStripStatusLabel1.Text = s.ProcessStep;
        toolStripProgressBar1.Value = e.ProgressPercentage;
    }

    void bw_copyToTemp_DoWork(object sender, System.ComponentModel.DoWorkEventArgs e)
    {

        Properties.Settings prop = Properties.Settings.Default;
        BackgroundWorker worker = sender as BackgroundWorker;
        if (worker.WorkerReportsProgress)
            // Initialize the object that the background worker calls.
            worker.ReportProgress(0, new CurrentState("Called from within form"));  //<<< THIS LINE IS PROCESSED SINGLE STEPPING THROUGH CODE (NO CHANGE IN GUI)

        copyFileOnDVDToTemp.CopyOpticalToHardDrive(worker, e);


    }

    void bw_copyToTemp_RunWorkerCompleted(object sender, System.ComponentModel.RunWorkerCompletedEventArgs e)
    {
        // test code goes here
    }
}
您错过了在按钮的Click事件处理程序中调用方法。您的工作进程在初始化后无法启动

private void btnCopyToTemp_Click(object sender, EventArgs e)
{

   bw_copyToTemp = new System.ComponentModel.BackgroundWorker
   {
       WorkerReportsProgress = true,
       WorkerSupportsCancellation = true
   };
   bw_copyToTemp.DoWork += bw_copyToTemp_DoWork;
   bw_copyToTemp.ProgressChanged += bw_copyToTemp_ProgressChanged;
   bw_copyToTemp.RunWorkerCompleted += bw_copyToTemp_RunWorkerCompleted;

   // Start background worker
   bw_copyToTemp.RunWorkerAsync();
}
请尝试以下操作,以查看在运行
DoWork
时调用了
ReportProgress

    void bw_copyToTemp_ProgressChanged(object sender, System.ComponentModel.ProgressChangedEventArgs e)
    {
        // Set breakpoint here
        CurrentState s = (CurrentState)e.UserState; 
    }

    void bw_copyToTemp_DoWork(object sender, System.ComponentModel.DoWorkEventArgs e)
    {
        BackgroundWorker worker = sender as BackgroundWorker;

        for (int i = 0; i <= 100; i++)
        {
            // Set breakpoint here
            worker.ReportProgress(i, new CurrentState("Percentage"));
        }
    }
void bw\u copyToTemp\u ProgressChanged(对象发送方,System.ComponentModel.ProgressChangedEventArgs e)
{
//在这里设置断点
CurrentState s=(CurrentState)e.UserState;
}
void bw_copyToTemp_DoWork(对象发送方,System.ComponentModel.DoWorkEventArgs e)
{
BackgroundWorker worker=发件人作为BackgroundWorker;
对于(int i=0;i您错过了在按钮的Click事件处理程序中调用方法。您的工作程序在初始化后无法启动

private void btnCopyToTemp_Click(object sender, EventArgs e)
{

   bw_copyToTemp = new System.ComponentModel.BackgroundWorker
   {
       WorkerReportsProgress = true,
       WorkerSupportsCancellation = true
   };
   bw_copyToTemp.DoWork += bw_copyToTemp_DoWork;
   bw_copyToTemp.ProgressChanged += bw_copyToTemp_ProgressChanged;
   bw_copyToTemp.RunWorkerCompleted += bw_copyToTemp_RunWorkerCompleted;

   // Start background worker
   bw_copyToTemp.RunWorkerAsync();
}
请尝试以下操作,以查看在运行
DoWork
时调用了
ReportProgress

    void bw_copyToTemp_ProgressChanged(object sender, System.ComponentModel.ProgressChangedEventArgs e)
    {
        // Set breakpoint here
        CurrentState s = (CurrentState)e.UserState; 
    }

    void bw_copyToTemp_DoWork(object sender, System.ComponentModel.DoWorkEventArgs e)
    {
        BackgroundWorker worker = sender as BackgroundWorker;

        for (int i = 0; i <= 100; i++)
        {
            // Set breakpoint here
            worker.ReportProgress(i, new CurrentState("Percentage"));
        }
    }
void bw\u copyToTemp\u ProgressChanged(对象发送方,System.ComponentModel.ProgressChangedEventArgs e)
{
//在这里设置断点
CurrentState s=(CurrentState)e.UserState;
}
void bw_copyToTemp_DoWork(对象发送方,System.ComponentModel.DoWorkEventArgs e)
{
BackgroundWorker worker=发件人作为BackgroundWorker;

对于(int i=0;我试图从SO帖子中删除无关的行,但无意中删除了.RunWorkerAsync()行。我已经编辑了我的帖子。在_dowork方法中有一条注释,显示了执行但不更新GUI的行。在
bw_copyToTemp\u ProgressChanged
方法的开头设置一个断点-当报告进度时,它应该会被点击。我已经编辑了原始帖子(再次)。bw_copyToTemp_ProgressChanged方法的几行被复制。bw_copyToTemp_ProgressChanged中的断点从未到达。我构建了一个VS项目,并尝试了代码示例。断点被击中,工作人员按预期报告了进度。您的实际代码必须与上面的代码不同。我将不得不查看res感谢您花时间构建一个项目来测试它,Oliver。我试图从SO帖子中删除无关的行,但无意中删除了.RunWorkerAsync()行。我已经编辑了我的帖子。在_dowork方法中有一条注释,显示了执行但不更新GUI的行。在
bw_copyToTemp\u ProgressChanged
方法的开头设置一个断点-当报告进度时,它应该会被点击。我已经编辑了原始帖子(再次)。bw_copyToTemp_ProgressChanged方法的几行被复制。bw_copyToTemp_ProgressChanged中的断点从未到达。我构建了一个VS项目,并尝试了代码示例。断点被击中,工作人员按预期报告了进度。您的实际代码必须与上面的代码不同。我将不得不查看res代码的t部分-可能是这个周末。感谢您花时间构建一个项目来测试它,Oliver。您能更正代码示例吗?第三个方法没有方法名称,但我猜它是
bw\u copyToTemp\u RunWorkerCompleted
方法。谢谢。代码示例已更正您已删除
bw\u copyToTemp\u runworkercompleeted
方法。您能更正代码示例吗?第三个方法没有方法名称,但我猜它是
bw\u copyToTemp\u RunWorkerCompleted
方法。谢谢。代码示例已更正您已删除
bw\u copyToTemp\u RunWorkerCompleted
方法。