Элемент управления может быть доступен только тем потоком, который его создал - это я знаю.
- У меня есть DataGridView с источником данных на основе BindingList <>.
- У меня есть рабочий поток (не-GUI), который выполняет некоторые модные вычисления / сравнения / и т.д., а затемдобавляет / редактирует объект в / в BindingList <>.
- В таймере поток GUI обновляется против BindingList <>.
Этот код работает безупречно - до тех пор, покатак как я не бегаю в окружающей среде.В среде, когда метод .Add () вызывается в BindingList <>, я получаю небольшую полезную ошибку:
An Exception has occurred
EXCEPTION : Cross-thread operation not valid: Control '' accessed from a thread other than the thread it was created on.
IN METHOD : get_Handle
AT LINE : 0
CLASS : System.Windows.Forms.Control
Обратите внимание, что имя нарушаемого элемента управления пусто ... Я думаю, что если бы проблема была в обновлении BindingList <>, не было бы никакого значения, работаю ли я в среде или нет.Несмотря на это, это то, что я вижу. Более того, .Add () завершается успешно, хотя генерируется исключение !!
Очевидно, что в моей производственной среде это не имеет большого значения (пока?), Поскольку это происходит только в Studio;и да, я мог бы вызвать поток GUI для выполнения добавления или сохранить добавления в месте, где поток GUI мог бы извлечь их позже ... Я не ищу обходной путь, но тем болеезаинтересован в ответе на этот вопрос:
Почему ошибка появляется только в студии?