как сохранить переднюю нить вместе с фоновым потоком. если я пытаюсь добавить элементы в список в do work, это дает мне исключение перекрестного потока.BackGroundWorker
ответ
В общем, обновления пользовательского интерфейса могут выполняться только из самой пользовательской строки.
Механизм для этого с BackgroundWorker
должен вызвать метод рабочего ReportProgress
(обязательно WorkerReportsProgress = true
). Этот метод вызовет событие ProgressChanged
, которое будет обрабатываться потоком пользовательского интерфейса.
Так что если вы хотите, чтобы добавить элементы в ListBox
управления, например, на основе какой-то работы, ваша BackgroundWorker
делает, вызовите ReportProgress
и передать все данные, вам необходимо в качестве параметра. Эти данные будут сохранены в свойстве UserState
ProgressChangedEventArgs
, предоставленном событием. Ваш обработчик событий может взять эти данные и заполнить его ListBox
.
Альтернативно, вы можете добавить все в конце, обработав событие рабочего. Если работа, выполняемая вашим работником, длится не так долго, это часто предпочтительнее, так как она проще, и она меньше ограничивает интерфейс (с меньшим количеством дискретных обновлений для выполнения).
Если вы хотите добавить элемент в список в DoWork-Event, вам необходимо «вызвать» элементы управления.
На самом деле это не рекомендуется. –
Вы можете запустить событие, которое выполняет работу по добавлению элементов в список, как показано в следующем примере, используя ListView.
ListViewItem _listViewItem;
private void BackgroundWorkerDoWork(object sender, DoWorkEventArgs e)
{
//your loop to get list view item
_listViewItem = new ListViewItem(mytext) {tag = mytagobject);
_listViewItem.SubItems.Add(mysubitemtext);
Invoke(new EventHandler(UpdateUiEvent), new[] { sender, e });
}
void UpdateUiEvent(object sender, EventArgs e)
{
listView1.Items.Add(_listViewItem);
}
- 1. BackgroundWorker
- 2. BackgroundWorker: передать общий список BackgroundWorker
- 3. WFP BackgroundWorker ждет другого BackgroundWorker, чтобы закончить
- 4. Именование BackgroundWorker
- 5. Отменить backgroundworker
- 6. Backgroundworker abort
- 7. inline backgroundworker
- 8. BackgroundWorker C#
- 9. Multi-BackgroundWorker
- 10. Отладка Backgroundworker
- 11. Powershell Backgroundworker
- 12. BackgroundWorker ошибочна
- 13. BackgroundWorker + WebBrowser
- 14. BackgroundWorker аннулирование
- 15. BackgroundWorker slow
- 16. BackgroundWorker, Methods
- 17. как запустить другую BackgroundWorker, если сначала BackgroundWorker Завершить одним способом
- 18. Подождите, пока мой BackgroundWorker не закончит, чтобы открыть новый BackgroundWorker
- 19. Как подождать, когда BackgroundWorker закончит выполнение другого BackgroundWorker (C#)?
- 20. Нить спать в BackgroundWorker
- 21. C#: BackgroundWorker Thread Priority
- 22. imersonation и BackgroundWorker
- 23. BackgroundWorker и Progressbar.Show()
- 24. C# BackgroundWorker и TrackBar
- 25. backgroundworker в бесконечном цикле
- 26. Тайм-аут для BackgroundWorker
- 27. documentviewer и backgroundworker
- 28. Dead lock with backgroundWorker
- 29. Process.Start in BackgroundWorker
- 30. GTK эквивалент BackgroundWorker (MonoDevelop)
В этом вопросе укажите более подробную информацию. Можно определить, что вы просите, но это сложно. –
По списку вы имеете в виду объект коллекции 'System.Collections.Generic.List'? –