d我有一个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);
}
然后,上下文方法的单击事件处理程序调用 JobStatusForm.Show()。在表格中,我有:
private void JobStatusForm_Shown(object sender, EventArgs e)
{
activeJobsBGWorker.RunWorkerAsync();
}
启动工人。
我发现工人开始了,然后引发了 RunWorkerCompleted 事件。发送者是后台工作者,事件参数为空。
如何找出引发此事件的原因,以及如何使其停止/重新启动?
谢谢,
编辑:
目前,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++ 项目,并调用调用数据库的静态方法。