我有一个winforms系统托盘应用程序,它通过数据库监视作业状态。我点击系统托盘,打开当前活动作业的菜单,如果我点击一个作业,我会创建一个应该显示消息和进度条的表单。
表单的构造函数是
public JobStatusForm()
{
InitializeComponent();
activeJobsBGWorker = new BackgroundWorker();
activeJobsBGWorker.DoWork += new DoWorkEventHandler(activeJobsBGWorker_DoWork);
activeJobsBGWorker.ProgressChanged += new ProgressChangedEventHandler(activeJobsBGWorker_ProgressChanged);
activeJobsBGWorker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(activeJobsBGWorker_RunWorkerCompleted);
}
然后,上下文方法的click事件处理程序调用JobStatusForm.Show()。在表格中,我有:
private void JobStatusForm_Shown(object sender, EventArgs e)
{
activeJobsBGWorker.RunWorkerAsync();
}
启动工人。
我发现工作人员启动,然后引发了RunWorkerCompleted事件。发件人是后台工作者,事件args为空。
如何找出引发此事件的内容,以及如何停止/重启?
谢谢,
编辑:
目前,Do_Work代码如下所示:
private void activeJobsBGWorker_DoWork(object sender, DoWorkEventArgs e)
{
//while (!e.Cancel)
while (true)
{
_clr.JobStatus status = _clr.SystemDataHelper.GetCurrentJobActivity(_clr.SystemDataHelper.GetLocation(), this.job_ID);
//if (activeJobsBGWorker.CancellationPending)
// continue;
activeJobsBGWorker.ReportProgress(status.pc, status);
Thread.Sleep(250);
}
}
我在ReportProgress行上设置了一个断点,它永远不会被命中。
对_clr的调用是作为dll构建的C ++项目,并调用一个调用数据库的静态方法。
答案 0 :(得分:3)
Do_Work方法中的异常也会导致RunWorkerCompleted被触发。