Как начать поток пользовательского интерфейса в C # - PullRequest
8 голосов
/ 13 апреля 2009

Я знаю, что могу начать новый рабочий поток с .NET. Но как мне начать новый поток пользовательского интерфейса (как в MFC)?

Я не против, если решение ограничено только блоками Windows; Я также хотел бы, чтобы решение было чисто .NET - никакой p / не вызывает CreateThread и т. Д.

Любой вклад приветствуется.

Ответы [ 4 ]

24 голосов
/ 13 апреля 2009

Использовать Application.Run - запускает цикл сообщений в текущем потоке. Существуют перегрузки, с которых нужно начинать форму, или контекст приложения, или ни того, ни другого. (Если вы хотите сделать это для нового потока, вам нужно создать поток и запустить его обычным способом, и заставить его вызвать Application.Run.)

4 голосов
/ 13 апреля 2009

Если вы заинтересованы в использовании WPF, ознакомьтесь со статьей MSDN Модель потоков WPF , в частности в разделе «Несколько окон, несколько потоков». В нем подробно описано, что нужно сделать, чтобы создать новый диспетчер и показать окно в новом потоке.

2 голосов
/ 13 апреля 2009

Если вы хотите создать новый поток, способный создавать дескрипторы окна и работать с ним, вы можете использовать функцию SetApartmentState для объекта Thread и установить для него значение STA. Вам также, вероятно, потребуется вызвать Application.Run внутри метода для этой цепочки, чтобы создать цикл обработки сообщений. Однако, имейте в виду, что вы подвержены тем же многопоточным нет-нетам, что и в любом другом потоке (то есть вы можете взаимодействовать с дескриптором только для элемента управления в потоке, внутри которого он был создан), Вы не можете ничего сделать в другом потоке пользовательского интерфейса без переключения контекстов.

0 голосов
/ 13 апреля 2009

Также вы можете сделать это:

    delegate void MyProcHandler(object param1, object param2);

    MyForm.Invoke
    (
            new MyProcHandler(delegate(object param1, object param2) 
            {
            // some code
            }), 
            null, 
            null
    ); 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...