Исключение между потоками - только среда

К элементу управления может получить доступ только поток, который его создал - это я знаю.

  1. У меня есть DataGridView с DataSource на основе BindingList <>.
  2. У меня есть рабочий поток (без GUI) это запускает какую-то причуду расчеты / сравнения / и т. д. и затем добавляет / редактирует объект в / в BindingList <>.
  3. По таймеру поток графического интерфейса обновляется по 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; и да, я мог бы вызвать поток графического интерфейса для выполнения операции добавления или сохранить добавления в месте, чтобы поток графического интерфейса мог получить их позже ... Я не ищу обходной путь, но тем более меня интересует ответ на этот вопрос:

Почему ошибка появляется только в студии?

5
задан Chris Barlow 1 June 2011 в 19:32
поделиться