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 ++プロジェクトへの呼び出しであり、データベースを呼び出す静的メソッドを呼び出します。