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