На рисунке ниже показано, как работает мой код. Когда я нажимаю кнопку 2, список обновляется, но не когда я нажимаю кнопку 1. Почему?
Связана ли проблема с многопоточностью? Если это так, куда мне добавить вызов (Begin) Invoke?
Следует отметить одну интересную вещь: если я сначала нажму кнопку 1, а затем кнопку 2, то данные, сгенерированные нажатием кнопки 1, будут показаны, когда я нажму кнопку 2. Таким образом, кажется, что данные, сгенерированные doFoo, буферизуются где-то, а затем помещаются в список после того, как я нажимаю кнопку 2.
EDIT:
Я попытался добавить AddNumber к коду формы и добавил вызов Invoke, когда listBox1.InvokeRequired возвращает true. Это решает проблему, но не самый лучший дизайн. Я не хочу, чтобы графический интерфейс пользователя беспокоился о том, как добавлять элементы в список, являющийся частью модели.
Как сохранить логику добавления в список, внутренний по отношению к списку, при этом обновляя графический интерфейс при изменении списка?
РЕДАКТИРОВАТЬ 2:
Теперь, когда мы подтвердили, что это проблема с многопоточностью, я обновил изображение, чтобы более точно отразить дизайн реального кода, над которым я работаю.
Хотя предложение Лусеро все еще решает проблему, я надеялся на то, что форме не нужно ничего знать о dll или CDllWrapper.
Модель (ListBoxDataBindingSource и т. Д.) Вообще ничего не должна знать о представлении (списки, кнопки, метки и т. Д.)