Если я запускаю метод, который требует 5 секунд, пока он не будет завершен. Это работает отлично. НО, в это время я не могу взаимодействовать с окном.
Например: Вы хотите, чтобы пользователь этой программы запустил метод, который открывается с помощью Selenium на веб-сайте и выполняет поиск 100 веб-сайтов, которые включают имя «Код»... и для этого нужны 100 секунд. Но в это время вы не можете взаимодействовать с пользовательским интерфейсом, вы не можете его закрыть.
Окно:
Например :
driver.Navigate().GoToUrl(url);
().Window.Maximize();
Thread.Sleep(3000);
Спасибо
Вы должны попытаться завершить трудоемкую задачу, используя неблокирующий (поток пользовательского интерфейса) способ. Например: асинхронный
Вы знаете, как я могу запустить код в другом потоке?
Ваше приложение работает в настоящее время в одном потоке. Это означает, что он может работать над чем-то одним одновременно. В этом случае обработайте взаимодействие с вашим окном или выполните свой длинный код.
Одним из возможных вариантов было бы выполнение вашего длинного кода в отдельном потоке. Подробнее в эта статья.
В C# есть идеальное решение для выполнения работы в фоновом режиме — Tasks. Я рекомендую вам использовать Tasks вместо Threads для небольших задач. Класс Tasks позволяет создавать задачи и запускать их асинхронно. Задача — это объект, представляющий некоторую работу, которую необходимо выполнить. Задача может сообщить вам, завершена ли работа, и если операция возвращает результат, задача дает вам результат.
Чтобы создать задачу и запустить ее, вы просто передаете свое действие в качестве аргумента методу StartNew:
Task.Factory.StartNew(() => {
driver.Navigate().GoToUrl(url);
driver.Manage().Window.Maximize();
Thread.Sleep(3000);
});
Другие способы запуска задачи здесь.
Вы можете прочитать больше о задачах в эта статья MSDN
Вы запускаете код в основном потоке. Запустите его в другом потоке или, если вы можете сделать его асинхронным.