Как проверить загрузку веб-страницы на RDP C#

У меня есть код C#, который открывает RDP - iexplore.exe другого сервера. Теперь мне нужно прокрутить веб-страницу вниз и сделать снимок экрана, но при каждой прокрутке изображение загружается не сразу. Поэтому, когда я делаю снимок экрана при каждой прокрутке, иногда выгруженное изображение сохраняется.
Я попытался поставить задержку в 1 секунду перед тем, как сделать снимок экрана, но это не полное решение проблемы. Есть ли другой способ / событие, чтобы проверить, что веб-страница / эта часть загружена?

Ниже приведен мой код:

        IHTMLElement2 scroller = null;
        if (currentSnapshot.IsFullPage)
        {
            scroller = GetScrolledElement(dimensions);
        }

        if (scroller != null)
        {
            originalScrollPosition = scroller.scrollTop;    //here's where we started to begin with
            maxScrollPosition = Math.Max(scroller.clientHeight, scroller.scrollHeight); 

            scroller.scrollTop = 0; //start at the top
        }
        var screen = SnapshotHelper.CaptureArea(dimensions);
        images.Add(screen);
        Thread.Sleep(1000);                    
        Application.DoEvents();

Спасибо

2 ответа

Решение

Спасибо за ваши предложения, сэр. Я смог решить то же самое, используя:

        while (IEApp.Busy)
            {                   
                Thread.Sleep(1000);
                Application.DoEvents();
            }

Я на мгновение представлю, что есть какая-то реальная и практическая причина, по которой вам нужно сделать все это через RDP, и сказать, что это не может быть сделано напрямую. При этом вы можете передать результаты снимка экрана, снятого на удаленной стороне в координации с IE, обратно клиенту RDP с использованием виртуального канала.

Client opens RDP --RDP--> Server which runs service listening for virtual channel
  1. Клиент отправляет запрос на рендеринг по виртуальному каналу
  2. Сервер рендерит и возвращает изображение

При этом было бы неплохо упомянуть об Awesomium, который использует тот же рендер, что и Chrome, через интерфейс C#.

Вы также можете реализовать фактический захват, используя встроенный элемент управления WebBrowser, который использует IE для визуализации. В этом блоге есть хорошая демонстрация того, как это сделать.

Другие вопросы по тегам