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イベントを発生させていることがわかりました。送信者はバックグラウンドワーカーであり、イベント引数はnullです。

このイベントの原因を特定するにはどうすればよいですか。また、イベントを停止/再開するにはどうすればよいですか。

ありがとう、

編集:

現在、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 に答える