У меня есть приложение Windows Forms, которое запускает процесс, который занимает до 3 часов. Пока он работает, я бы хотел, чтобы пользовательский интерфейс реагировал на команды «Остановить», а также обновлял ход выполнения задания. Говоря простыми словами, длительная работа вокруг цикла обрабатывает тысячи раз, обрабатывая записи, и именно в этом цикле я хотел бы обновить интерфейс.Запуск отдельного потока, обновление пользовательского интерфейса и возможность его отмены
Мне удалось запустить код, используя параметр FromCurrentSynchronizationContext с TPL Tasks. Я также использовал CancellationTokens, чтобы отменить текущий поток.
Однако я не могу понять, как совместить эти два.
The BackgroundWorker разработан с учетом этого: http://msdn.microsoft.com/en-us/library/system.componentmodel.backgroundworker(v=vs.110).aspx Пример выглядит практически так, как вы пытаетесь сделать , –
Можете ли вы рассказать о том, что вы подразумеваете под * «объединить два» *? Если у вас есть токен отмены, вы просто передаете это с задачей и внутренне проверяете состояние. – James
использовать BackgroundWorker. взгляните на его события и свойства, он может сообщить о прогрессе, который вы можете использовать для обновления прогресса в пользовательском интерфейсе. Он также поддерживает отмену. –