0

バックグラウンドワーカーがいます。開始時に、データベースから別の Web サービスにレコードを送信するメソッドを呼び出します。

問題は、ジョブの送信を停止する停止ボタンを作成しましたが、機能しませんでした。

backgroundworker または CancelAsync を破棄しようとしましたが、そのメソッドはまだ実行されています (私のアプリは Windows フォーム アプリであるため、メソッドがまだ実行されていることがわかっています)。誰でも私にこれの解決策を教えてもらえますか? どうも!

私のコード:

 private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
        {
            Send();
        }

停止ボタン

private void btnStop_Click(object sender, EventArgs e)
        {            
            try
            {
               backgroundWorker1.CancelAsync();   
               backgroundWorker1.Dispose();                                
            }
            catch (Exception ex)
            {
                Global._logger.Info(ex.Message + ex.Source);
                ShowError(ex.Message);
            }

        }

注 : メソッド Send() は、DB をチェックした後、別のメソッドを呼び出してレコードを送信します。

4

3 に答える 3

1

これはすべて、何をしているかに依存しSendます。BackgroundWorkerインスタンスをこのメソッドに渡し、プロパティをチェックする必要がありCancellationPendingます (これは を呼び出した後に設定されますCancelAync)。Sendある種の非同期投稿または一括投稿を使用している場合、それをキャンセルすることはできません。ある時点でこのプロパティを検査して、実行していることを停止できる必要があります。

于 2012-12-12T03:54:56.097 に答える
0
if(worker.IsBusy)
{
    worker.CancelAsync();
}
else
{
    worker.RunWorkerAsync();
}   
于 2012-12-12T04:08:44.707 に答える
0

わかりました、私はそれを見つけました:)バックグラウンドワーカーで何もする必要はありません。それを破棄し、Send()メソッドが呼び出すメソッドでループを終了するフラグとしてグローバル変数を作成します

于 2012-12-12T03:59:37.853 に答える