motkot
@motkot
Программирование C#.

Почему дедлок или что-то типо того происходит?

private string GetHTMLFromWebBrowser()
        {

            // Get the html source code from the main Frame.
            // This is displaying only code in the main frame and not any child frames of it.
            Task<String> taskHtml = browser.GetBrowser().MainFrame.GetSourceAsync();

            string response = taskHtml.Result;
            return response;
        }

        private void WebBrowserFrameLoadEnded(object sender, FrameLoadEndEventArgs e)
        {
            html = GetHTMLFromWebBrowser();


Типо дальше html = ничего не выполняется.
Через debigger посмотрел, останавливается на string response = taskHtml.Result;
  • Вопрос задан
  • 79 просмотров
Решения вопроса 1
@Voland69
Result у Task - блокирующая операция. Вот тут подробнее про deadlock

Я бы сделал так - ожидание завершения async операции в отдельном потоке - по завершению ожидания event, подписчик которого обновить данные на форме.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
vabka
@vabka Куратор тега C#
Токсичный шарпист
Task<String> taskHtml = browser.GetBrowser().MainFrame.GetSourceAsync();

            string response = taskHtml.Result;

Да, дедлок. Нельзя в винформах вызывать .Result.
Используй async-await и ConfigureAwait(false) там, где возможно.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы