Как я правильно отменяю и перезапускаю процесс BackgroundWorker?

Вам нужно установить параметры запроса, используя HttpParams, и передать null для полезной нагрузки, если у вас их нет:

const params = new HttpParams()
            .set('peopleFieldID', peopleFieldID.toString())
            .set('peopleFieldName', peopleFieldName);
// if you have a payload to pass you can do that in place of null below
return this.http
  .put<number>(this.url, null, { params: params })
  .pipe(catchError(this._errorHandling.handleError.bind(this)));}
9
задан Zack Peterson 11 March 2009 в 15:51
поделиться

3 ответа

Я нашел ответ в этой статье:

Закрытие BackgroundWorker и переопределяемая задача Patrick Smacchia

Я адаптировал его код:

Private _ValidationArgument As W3CValidator

Sub W3CValidate(ByVal WholeDocumentText As String)
    If _ValidationArgument IsNot Nothing Then
        _ValidationArgument = New W3CValidator(WholeDocumentText)
        Exit Sub
    End If
    If Not ValidationWorker.IsBusy Then
        ValidationWorker.RunWorkerAsync(New W3CValidator(WholeDocumentText))
        Exit Sub
    End If
    _ValidationArgument = New W3CValidator(WholeDocumentText)
    ValidationWorker.CancelAsync()
    Dim TimerRetryUntilWorkerNotBusy As New Windows.Threading.DispatcherTimer
    AddHandler TimerRetryUntilWorkerNotBusy.Tick, AddressOf WorkTicker
    TimerRetryUntilWorkerNotBusy.Interval = New TimeSpan(1) '100 nanoseconds
    TimerRetryUntilWorkerNotBusy.Start()
End Sub

Sub WorkTicker(ByVal sender As Object, ByVal e As System.EventArgs)
    If ValidationWorker.IsBusy Then
        Exit Sub
    End If
    DirectCast(sender, Windows.Threading.DispatcherTimer).Stop()
    ValidationWorker.RunWorkerAsync(_ValidationArgument)
    _ValidationArgument = Nothing
End Sub
0
ответ дан 4 December 2019 в 21:51
поделиться

В Вашем фоновом цикле рабочего процесса необходимо проверить на
backgroundWorkerPageProcess.CancellationPending
и выход соответственно. Затем, после того как это существует, Ваш цикл с условием продолжения isBusy должен быть отмечен соответственно.

Обновление: после установки Отмены = верный, что Вы возвращаетесь из метода? spitballing здесь Обновление 2: Вы флаг WorkerSupportsCancellation установили на истинный на backgroundworker? Также в рабочем завершил возврат метода если e. Отмененный.... больше бумажных шариков

Обновление 3: после некоторой проверки и моей собственной компиляции кажется, что проклятая вещь никогда не выходит из isbusy в рамках того же метода. - одна опция состоит в том, чтобы отключить кнопку, в то время как занятый и имеют другого для отмены, только чтобы пользователь повторно нажал проверку. - или на Вашем рабочем завершил метод если (e. Отмененный), называют Ваш метод проверки с соответствующим текстом....

так или иначе вид промаха все же. Извините, что не помог здесь.

1
ответ дан 4 December 2019 в 21:51
поделиться

Попробуйте что-нибудь вроде этого:

bool restartWorker = false;

    void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
    {
                    // add other code here
        if (e.Cancelled && restartWorker)
        {
            restartWorker = false;
            backgroundWorker1.RunWorkerAsync();
        }
    }

    private void button1_Click(object sender, EventArgs e)
    {
        if (backgroundWorker1.IsBusy)
        {
            restartWorker = true;
            backgroundWorker1.CancelAsync();
        }
        else
            backgroundWorker1.RunWorkerAsync();
    }
8
ответ дан 4 December 2019 в 21:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: