Запуск каждой дочерней формы как отдельного потока в контейнере MDI - PullRequest
2 голосов
/ 27 октября 2011

Можно ли запускать каждую дочернюю форму MDI-формы в отдельном потоке?Если да, не могли бы вы дать несколько кодов и пример, как это настроить?

Спасибо!

Ответы [ 3 ]

6 голосов
/ 27 октября 2011

Я не могу сказать из вопроса, знаете ли вы об экзотической природе решения, которое вы предлагаете. Я прошу прощения, если этот ответ полностью не соответствует цели.

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

Однако наличие другого потока графического интерфейса для формы не , как обычно это достигается. Я не знаю, возможно ли это вообще.

У вас по-прежнему будет только один поток, обрабатывающий всю графику (он же «поток GUI»), но всю трудоемкую работу следует немедленно перенести в другой поток (он же рабочий поток). Таким образом, приложение остается отзывчивым.

Предлагаю вам проверить это видео. Применимо или нет, но в течение 4-6 минут вы должны знать, нужен ли вам этот ответ.

Эпизод DNRTV со Стивеном Таубом

Другая возможность состоит в том, что вы спрашиваете о том, как отобразить форму, не являясь модальной .

3 голосов
/ 27 октября 2011

номер

Любое действие с графическим интерфейсом должно происходить в главном потоке.

Обработка может быть выполнена в отдельном потоке, в этом случае попробуйте использовать BackgroundWorker в дочерних формах.

1 голос
/ 11 февраля 2016

В этом MSDN сообщении на форуме говорится, что формы можно запускать в отдельных потоках. Однако я не знаю, применимо ли это к детским формам MDI. Но техника достаточно проста:

Thread thread = new Thread( () =>
   {
         var yourForm = new YourForm();
         Application.Run(yourForm);
   });
thread.ApartmentState = ApartmentState.STA;
thread.Start();
...