Помните до того момента, когда ваше приложение будет живым? Если в вашем приложении нет хотя бы одного основного потока.
При запуске приложения основной поток вводит метод Main()
. Он получает байты из сокета и запускает новый поток, передавая эти байты в качестве аргумента. И тогда ваш основной поток завершается, но по мере того как вы создали ваше потоковое приложение foreground , оно все еще работает. Новый поток создает форму и показывает ее, но он не инициализирует цикл отправки сообщений, поэтому ваша форма не отображается полностью и ведет себя как приложение-обработчик - она просто не обрабатывает никаких сообщений от пользователя (при наведении курсора, нажатии, перетаскивании и т. Д.). ). Тем временем вы замораживаете поток на 5 секунд, а затем он закрывается, ваше приложение закрывается.
Так что никаких проблем здесь нет, волшебства нет, все детерминировано и работает точно так, как вы его запрограммировали:)
Попробуйте использовать Application.Run(mainForm);
или mainForm.ShowDialog()
вместо mainForm.Show()
. Эти методы запустят цикл обмена сообщениями приложения, и вы увидите открытую форму, пока не закроете ее. Подробнее о цикле обмена сообщениями в приложениях здесь .
Еще одно замечание: вы не устанавливаете квартиру в своем потоке пользовательского интерфейса. Прочитайте здесь подробнее, что это за хакерство. Пожалуйста, позвоните t.SetApartmentState(ApartmentState.STA);
, прежде чем позвонить Start()
. Другой вариант - пометить Main()
на STAThreadAttribute
и запустить форму, как я описал выше в вашем методе Main()
.