вот рабочее решение 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;
К сожалению, вероятно, нет. Фоновый рабочий поток должен назвать ReportProgress для обновления потока UI, и он должен наблюдать за CancellationPending, чтобы знать, должен ли он остановиться или нет. Так, если Ваш рабочий поток выполняет операцию вдоль выполнения в одной строке, нет никакого способа сделать эту работу.
Возможно, я неправильно понял, таким образом, вот код, который моделирует то, что я достигаю:
public void DoWork() {
System.Threading.Thread.Sleep(10000);
// won't execute until the sleep is over
bgWorker.ReportProgress(100);
}
a) Вы могли отобразить анимированный GIF на своей форме вместо индикатора выполнения при помощи управления PictureBox. Можно найти подробную информацию о том, как сделать это в этом сообщении в блоге.
b) Класс BackgroundWorker имеет метод CancelAsync, который отправит запрос для отмены текущей операции.
Это установит свойство CancellationPending BackgroundWorker к 'Истинному'. В Вашем обработчике событий DoWork затем, необходимо будет опрашивать это свойство регулярно для принятия appropariate мер, когда его значение изменяется.
Также обратите внимание, что, чтобы это работало, необходимо будет установить свойство WorkerSupportsCancellation BackgroundWorker к 'Истинному'.
Ваш код ui может отобразить анимацию, прежде чем это запустит второстепенного рабочего, И в случае необходимости отменять, можно завершить фоновый поток. Вы будете весьма, к счастью, beable для использования фонового дизайна рабочего.
Вы не неправильно поняли - использование ReportProgress или использование делегата (как я делаю), достигают по существу той же цели.