Создание нескольких циклов сообщений для вложенных элементов управления формы - PullRequest
3 голосов
/ 06 марта 2012

Очень короткая история, мне нужно поместить панель WinForms и экземпляр неуправляемого класса, который рисует на нем, в отдельном потоке, чтобы поддерживать отзывчивость главного окна (иногда SDK может потребоваться несколько секунд, чтобы придумать что он будет рисовать, и пока он это делает, он блокирует поток пользовательского интерфейса). Я действительно нуждаюсь во многих из них (до 32), но пока мы поговорим только об одном; концепция должна дублироваться столько раз, сколько необходимо.

Я думаю, что мне нужно сделать, это запустить новый поток, который «обновит» Panel, затем запустить ApplicationContext, который не привязан ни к чему конкретному, и назначить его Panel. Затем класс Panel должен иметь перегрузку Dispose (), которая приведет к завершению ApplicationContext, отключив рассылку сообщений и завершив поток.

Что мне нужно знать, это:

  • Может ли Panel быть помещена в IContainer или добавлена ​​в коллекцию Controls любого родительского объекта? Или это приведет к выполнению не поточно-безопасных вызовов?
  • У меня есть статический метод фабрики в классе, который создает новые экземпляры в новых потоках. Мне нужно вернуть ссылку на эту панель (созданную в фоновом потоке) из метода, чтобы я мог работать с ним. Есть ли лучший способ сделать это, чем ждать в цикле while / sleep, чтобы переменная, определенная локально в статическом методе, была установлена ​​фоновым потоком?
  • Нужно ли сохранять ссылку на тему, которой принадлежит Panel?
  • Я безумен, пытаясь это сделать?

1 Ответ

6 голосов
/ 06 марта 2012

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

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