Поток BackgroundWorker: обновление UI и прерывание операции

вот рабочее решение https://codesandbox.io/s/ymorp9y17v

import * as PropTypes from "prop-types";

const SayHello = props => {
  return (
    
Hello {props.firstName} {props.lastName}!
); }; SayHello.propTypes = { firstName: PropTypes.string.isRequired, lastName: PropTypes.string.isRequired }; export default SayHello;

5
задан eft 11 November 2008 в 22:29
поделиться

4 ответа

К сожалению, вероятно, нет. Фоновый рабочий поток должен назвать ReportProgress для обновления потока UI, и он должен наблюдать за CancellationPending, чтобы знать, должен ли он остановиться или нет. Так, если Ваш рабочий поток выполняет операцию вдоль выполнения в одной строке, нет никакого способа сделать эту работу.

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

public void DoWork() {
    System.Threading.Thread.Sleep(10000);

    // won't execute until the sleep is over
    bgWorker.ReportProgress(100);
}
2
ответ дан 14 December 2019 в 19:29
поделиться

a) Вы могли отобразить анимированный GIF на своей форме вместо индикатора выполнения при помощи управления PictureBox. Можно найти подробную информацию о том, как сделать это в этом сообщении в блоге.

b) Класс BackgroundWorker имеет метод CancelAsync, который отправит запрос для отмены текущей операции.
Это установит свойство CancellationPending BackgroundWorker к 'Истинному'. В Вашем обработчике событий DoWork затем, необходимо будет опрашивать это свойство регулярно для принятия appropariate мер, когда его значение изменяется.
Также обратите внимание, что, чтобы это работало, необходимо будет установить свойство WorkerSupportsCancellation BackgroundWorker к 'Истинному'.

1
ответ дан 14 December 2019 в 19:29
поделиться

Ваш код ui может отобразить анимацию, прежде чем это запустит второстепенного рабочего, И в случае необходимости отменять, можно завершить фоновый поток. Вы будете весьма, к счастью, beable для использования фонового дизайна рабочего.

1
ответ дан 14 December 2019 в 19:29
поделиться

Вы не неправильно поняли - использование ReportProgress или использование делегата (как я делаю), достигают по существу той же цели.

0
ответ дан 14 December 2019 в 19:29
поделиться
Другие вопросы по тегам:

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