Я использую BackgroundWorker в первый раз, и использование не совсем понятно. Могу ли я отправлять события непосредственно из обработчика DoWork, или мне нужно вместо этого вызвать ReportEvents и отправить событие из обработчика ProgressChanged?Можно ли запустить событие непосредственно из обработчика DoWork от BackgroundWorker?
ответ
Хотя это технически возможно поднять события и работать с UI изнутри DoWork
, вы должны сделать так же, как вы бы из любого другого потока (с помощью Invoke()
или BeginInvoke()
для взаимодействия пользовательского интерфейса, или правильной синхронизации потоков для другие операции с поперечной резьбой), что приведет к поражению цели BackgroundWorker
.
Лучшим вариантом является вызов ReportProgress()
, который затем создает событие ProgressChanged
в потокобезопасном режиме. Вы передаете int
, представляющий процентное заполнение (хотя вам действительно нужно что-то сделать с ним) и, при желании, любой object
, который вам потребуется для получения конкретной информации о событии или прогрессе. Изнутри ProgressChanged вы можете взаимодействовать с пользовательским интерфейсом, поднимать события и т. Д.
Просто добавьте это в код.
void new control.CheckForIllegelCrossPathThreads == false;
- 1. Событие BackgroundWorker 'DoWork' не срабатывает
- 2. Как обработать исключение, которое было выбрано из DoWork-обработчика BackgroundWorker?
- 3. C# BackgroundWorker Anomaly DoWork событие не стрельбы
- 4. окна доступа управления от BackgroundWorker DoWork
- 5. Возможно ли обновить пользовательский интерфейс от события dowork backgroundworker
- 6. Приостановка дополнительных событий в методе DoWork BackgroundWorker
- 7. Последовательные процедуры внутри DoWork BackgroundWorker
- 8. BackgroundWorker завершает работу перед DoWork
- 9. Как отменить DoWork in Backgroundworker
- 10. vb.net Backgroundworker DoWork not end
- 11. Передача метода в BackgroundWorker DoWork
- 12. LoadCompleted событие в DoWork случае
- 13. Можно ли убить поток BackgroundWorker?
- 14. Всегда ли можно отказаться от подписки на событие внутри обработчика?
- 15. Можно ли вызвать RunWorkerAsync() из RunWorkerCompleted() на BackgroundWorker?
- 16. C# Получить значение текстового поля в backgroundworker dowork event
- 17. Пропустить BackgroundWorker в класс, вызываемый doWork?
- 18. Протестировать ли событие из обработчика
- 19. BackgroundWorker Сбои применение при DoWork называется
- 20. Метод RunWorkerAsync BackgroundWorker не вызывает DoWork();
- 21. Событие BackgroundWorker не срабатывает
- 22. Как использовать событие изменения WebClient из события backgroundower dowork?
- 23. Можно перезапустить приложение из BackgroundWorker?
- 24. Как я могу вызвать метод, вызванный из события dowork backgroundworker?
- 25. Можно ли вызвать метод в DoWork event?
- 26. Можно ли вызвать canvas.drawWindow() из обработчика onload?
- 27. Как дождаться обработчика событий SerialPort DataReceived во время BackgroundWorker
- 28. Как использовать событие BackgroundWorker RunWorkerCompleted
- 29. Можно ли запустить событие, когда d3js готов?
- 30. Использование BackgroundWorker из VBScript
Как правило, вы никогда не должны разговаривать с нитью из любого другого потока. Вы получите побочные эффекты, которые очень трудно отлаживать. Только не делай этого. Как сказал Адам, лучшим вариантом является вызов ReportProgress. – Tony