Для вашей первой проблемы это звучит так, как будто вы выполняете какую-то долгую операцию, используя поток, который запускает aws пользовательский интерфейс, не позволяя ему выполнять свою работу по обновлению пользовательского интерфейса. Когда это происходит, Windows ОС покажет сообщение, если обнаружит, что операция не отвечает.
Внутренний способ работы windows заключается в том, что у него есть очередь для вашего приложения, в которую он отправляет сообщения для таких вещей, как команда рисования окна, нажатия кнопки мыши и нажатия клавиш и т. Д. c. Основной поток, запустивший ваше приложение, выполняет задачу по потреблению этой очереди и ее уменьшению. Если вы что-то делаете (допустим, вы начинаете вычислять число Пи до 3 квадриллионов) в обработчике событий нажатия кнопки, то основной поток больше не сможет получать сообщения из очереди windows. Windows замечает, что очередь становится все длиннее и длиннее, и показывает сообщение «это приложение не отвечает».
Этого можно избежать, НЕ выполняя длинные операции в потоке windows или используя какой-либо асинхронный / многопоточный режим для выполнения вашей длинной операции, которая позволит основному потоку go вернуться к его работа с windows очередью сообщений
Для вашего второго запроса это кажется разумным:
Когда вы используете ShowDialog()
, выполнение этого кода приостанавливается в точке ShowDialog вызывается и продолжается только в том случае, если форма, открытая с помощью ShowDialog (), закрыта
ShowDialog предназначен для того, чтобы задать пользователю вопрос, на который вам нужен ответ в строках кода после. Если код не останавливался, пока диалоговое окно было открыто, у пользователя не было бы времени дать ответ, прежде чем код нуждался в ответе
В вашем коде, пока Form
не будет закрыт, Form1.Activate()
не случится. Как только форма закроется, остальные 3 оператора будут называться
Обратите внимание, что если форма запускает длительную операцию, то это также вызовет проблему «приложение не отвечает»