как использовать диспетчер wpf для создания приложения winforms с несколькими потоками пользовательского интерфейса

Второй ответ Мартина в этой ссылке объясняет, как можно использовать диспетчер в приложение winforms. Эта ссылка объясняет сторона wpf. Итак, мой вопрос: можем ли мы сделать это в приложении winforms? Если нет, то почему? Спасибо

ОБНОВЛЕНИЕ: я нашел эту ссылку, которая также показывает множественный метод app.run, упомянутый Хенком ниже. . Однако он не использует диспетчер wpf. Интересно, есть ли разница в производительности между использованием диспетчера wpf в winforms (мой вопрос) и несколькими app.runs?


person Gullu    schedule 29.09.2011    source источник
comment
Большой вопрос: почему? Вы можете запустить второй поток с помощью App.Run в WinForms, но это тоже никогда не казалось хорошей идеей.   -  person Henk Holterman    schedule 29.09.2011
comment
По той же причине, что указана в ссылке, которую я разместил. Приклеиваем сюда. В приложении с очень интенсивным пользовательским интерфейсом (например, торговое приложение с примерно десятью окнами, показывающими монтаж в реальном времени и промокательные данные) просто стоимость создания и размещения визуальных элементов может стать слишком высокой для одного потока.   -  person Gullu    schedule 29.09.2011


Ответы (1)


Независимо от того, что вы делаете, вы будете ограничены использованием 1 потока (потока пользовательского интерфейса) для обновления ваших окон (Winforms, WPF, собственного кода). Вы можете создать столько рабочих потоков, сколько хотите, чтобы выполнить весь сбор данных и подготовительную работу, которая вам нужна, однако вам все равно придется использовать поток пользовательского интерфейса для выполнения обновлений. Взгляните на классы Task или BackgroundWorker, чтобы выполнить эту работу.

person Bahri Gungor    schedule 29.09.2011
comment
ссылка на статью, которую я разместил в своем вопросе, четко демонстрирует, как вы можете создать отдельный поток сообщений / пользовательского интерфейса для каждого окна. У него около 16 голосов и много похвал в нижних комментариях. Это первая статья, которую вы получаете, когда ищете в Google несколько потоков пользовательского интерфейса. Что мне здесь не хватает? Благодарность - person Gullu; 29.09.2011
comment
@Gullu Понятно, так что вам нужен только один цикл сообщений для каждого окна. Я бы не стал смешивать технологии на этом уровне. Есть много проблем с интеграцией WinForms с WPF (в любом направлении), и я думаю, что их смешивание на этом уровне просто внесет ненужную сложность. Да, Application.Run(form) будет работать для WinForms, Dispatcher.Run() будет работать для WPF. В любом случае цикл сообщений создается и выполняется, удовлетворяя ваш вопрос. - person Bahri Gungor; 30.09.2011