0

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++ 项目,并调用调用数据库的静态方法。

4

1 回答 1

3

Do_Work 方法中的异常也会导致 RunWorkerCompleted 被触发。

于 2012-06-27T02:35:09.077 回答