Создание WinForm в консольном приложении - PullRequest
2 голосов
/ 22 декабря 2010

Когда я запускаю следующий код, обе формы "зависают".Есть идеи почему?

    static void Main()
    {

        Form f1 = new Form();
        f1.Show();

        Form f2 = new Form();
        f2.Show();


        Console.ReadLine();
    }

Ответы [ 3 ]

6 голосов
/ 22 декабря 2010

Поскольку в вашей цепочке нет цикла сообщений.

Чтобы форма работала, вы должны открыть ее через Application.Run(form) (MSDN Link)

2 голосов
/ 22 декабря 2010

По сути, вам нужно позвонить Application.Run для обработки сообщений окна.

Если одна из форм является вашим "главным окном", т.е. вы хотите, чтобы приложение закрывалось при закрытии окна,вам следует использовать Application.Run(form).

Если вы хотите, чтобы несколько окон, ни одно из которых не было особенно значимым, используйте просто Application.Run() и решите самостоятельно, когда выходить из приложения, вызвав Application.Exit().

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

0 голосов
/ 22 декабря 2010

Есть ли у вас какие-либо взаимодействия с этими формами или они пустые тестовые?

Я бы подумал, что код будет запускать форму в том же потоке, что и окно консоли - и блоки Show(), пока не будет отображена показанная форма. Возможно, что консольное окно блокируется, что приводит к тупику. Я ожидаю, что выполнение консоли продолжится, как только вы закроете f1, если сможете.

изменить: другие ответы показали, что я совершенно не прав. Не обращай внимания на то, что я сказал. В любом случае, я думаю, что это на самом деле ShowDialog() в диалоговом окне, которое блокирует, а не Show().

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