Несоответствия потоков, обновляющие контроль формы из потока - PullRequest
1 голос
/ 26 июля 2011

У меня есть сценарий, где поток обновляет контроль формы.Я следовал http://msdn.microsoft.com/en-us/library/ms171728.aspx, чтобы все заработало, но у меня ничего не получилось.

Программа создает элемент управления формы (представление списка) и поток для получения информации из Интернета (котировки акций).Всякий раз, когда пользователь выбирает известный символ из другого элемента управления формы, который будет добавлен в listView, этот стажер добавляет в поток для извлечения кавычки из Интернета, и для этого конкретного символа добавляется делегат, поток перебирает все символы списка наблюдения, чтобыизвлекать цитаты из интернета всякий раз, когда происходит изменение цены, ветка вызывает зарегистрированного делегата.В этом делегате я обращаюсь к элементам listView, здесь я сталкиваюсь с проблемами противоречивых проблем потока.

Чтобы решить эту проблему, я пошел по вышеупомянутой ссылке, Подход-1) В делегате я начал фоновый работник.Та же проблема, Подход-2) Основная программа создает фонового работника, этот работник зацикливается вокруг списка для обновления в listView.Делегат добавляет новую обновленную цену в список, на котором работает фоновый работник.Когда фоновый работник снова обращается к listView, возникают противоречивые проблемы с потоками.

Как решить эту проблему?

1 Ответ

1 голос
/ 26 июля 2011

Когда фоновый работник снова обращается к listView, возникают проблемы с потоками.

Да. Это потому, что это не должно быть сделано. Фоновый рабочий обеспечивает только безопасный доступ к пользовательскому интерфейсу событий RunWorkerCompleted и ProgressChanged . Событие DoWork все еще выполняется в потоке без пользовательского интерфейса. Чтобы получить доступ к пользовательскому интерфейсу из потока, не являющегося пользовательским интерфейсом, выполните «маршалинг назад» в поток пользовательского интерфейса, используя Control.Invoke или SynchronizationContext.Send (это может привести к дальнейшим результатам, если использовать его в качестве ключевых слов.)

Удачного кодирования.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...