Я видел других с подобной проблемой, но не совсем то, что я искал. В событии dowork класса backgrounderworker я создаю экземпляр нового класса и вызываю одну из его функций. Раньше у меня был этот код в событии tick.timer windows и передавал делегат в качестве одного из параметров, который позволял бы функции и другим функциям, которые он вызывает в классе, вызывать метод в форме для обновления datagrid на графическом интерфейсе. Есть ли способ сделать это в рамках мероприятия dowork? Мне нужно это, потому что функция, которую я вызываю из dowork, вызывает другие функции, и я хочу, чтобы каждая из этих функций записывала информацию в графический файл GUI.Возможно ли обновить пользовательский интерфейс от события dowork backgroundworker
ответ
. Помимо ReportProgess
, упомянутых в ответе Ганса, вы можете использовать Control.Invoke на одном из элементов интерфейса для выполнения кода в потоке пользовательского интерфейса.
Этот метод BackgroundWorker.ReportProgress() предназначен для этого. Вы реализуете событие ProgressChanged для обновления пользовательского интерфейса, оно будет работать в основном потоке. Вы не можете указывать только процент прогресса, вы можете передать любой объект, а также передать информацию обработчику событий, используя перегрузку, которая принимает аргумент user userState. Помните, что вам нужно использовать правильную блокировку, если вы это сделаете.
Не забудьте установить для свойства «WorkerReportsProgress» значение true для самого рабочего фона. –
Вот проблема, с которой я сталкиваюсь с использованием ReportProgress. В DoWork я вызываю функцию. Эта функция вызывает вызовы для других функций. Я хочу, чтобы все эти функции могли отправлять обновления статуса в пользовательский интерфейс. – daustin
Итак, напишите функцию, которая вызывает ReportProgress, чтобы все остальные функции могли ее вызвать. Передайте делегата, если вам нужно. Будьте осторожны, маршалинг потоков очень дорог. Назовите его более ~ 1000 раз в секунду, а поток пользовательского интерфейса погаснет, когда он больше не сможет справиться. –
Вы можете отправить данные о ходе выполнения в поток пользовательского интерфейса, вы получите событие для него в потоке пользовательского интерфейса, после чего вы можете обновить экран. очень предпочтительно, что объекты, которые вы отправляете обратно в поток пользовательского интерфейса, неизменяемы. Помимо вызова ReportProgress
и обработки события вам необходимо отказаться, установив для свойства WorkerSupportsProgress
значение true.
- 1. Обновить пользовательский интерфейс от события с потоком
- 2. Можно ли запустить событие непосредственно из обработчика DoWork от BackgroundWorker?
- 3. BackgroundWorker завершает работу перед DoWork
- 4. окна доступа управления от BackgroundWorker DoWork
- 5. Обновить пользовательский интерфейс от AsyncCallback
- 6. vb.net Backgroundworker DoWork not end
- 7. Обновить пользовательский интерфейс из ViewModel
- 8. Последовательные процедуры внутри DoWork BackgroundWorker
- 9. Как отменить DoWork in Backgroundworker
- 10. Обновить пользовательский интерфейс с помощью таймера в WPF (с BackgroundWorker?)
- 11. RunWorkerОбновлен пользовательский интерфейс до завершения DoWork
- 12. Как обновить пользовательский интерфейс от события кнопки (или другой задачи)
- 13. Передача метода в BackgroundWorker DoWork
- 14. Событие BackgroundWorker 'DoWork' не срабатывает
- 15. Приостановка дополнительных событий в методе DoWork BackgroundWorker
- 16. Отложенное выполнение DoWork события фона рабочего рабочего
- 17. Как я могу вызвать метод, вызванный из события dowork backgroundworker?
- 18. C#/WPF - Я не могу обновить пользовательский интерфейс с BackgroundWorker
- 19. Пропустить BackgroundWorker в класс, вызываемый doWork?
- 20. «Блок» Пользовательский интерфейс Thread to Backgroundworker завершен
- 21. Попытка обновить пользовательский интерфейс WPF
- 22. Обновить пользовательский интерфейс от рабочего стола
- 23. iOS - обновить пользовательский интерфейс от фона
- 24. Как обновить пользовательский интерфейс от Runnable?
- 25. Невозможно обновить пользовательский интерфейс от AsyncTask
- 26. Обновить пользовательский интерфейс в gwt
- 27. Обновить графический интерфейс от фонового работника или события
- 28. Как обновить пользовательский интерфейс Silverlight при обработке
- 29. BackgroundWorker Сбои применение при DoWork называется
- 30. C# BackgroundWorker Anomaly DoWork событие не стрельбы
Но в DoWork я могу передать эту способность (как параметр делегата) классу I, установленному в DoWork? – daustin
@ пользователь94593: Конечно. – Heinzi
Есть ли у вас пример кода? – daustin