GeckoFX\Awesomium Многопоточность

600
12 февраля 2017, 09:24

Добрый день!

Задача такая: Приложение которое будет запускать много несвязанных между собой ВебБраузеров, а они в свою очередь должны выполнять работу. Несвязанность нужна т.к. будут использованы разные Прокси, Кукки и т.д.

Я рассматривал: WebBrowser, GeckoWebBrowser, Awesomium(WebControl, WebView), CefSharp;

WebBrowser и cefSharp нет возможности запуcтить несколько экземпляров с разными прокси, их сразу откидываем.

Из всего что есть под C#, подходит GeckoFX и Awesomium в плане прокси, то что нужно. Но вот с ними проблема, сразу много экземпляров запустить не получается. Пробовал с многопоточностью поиграться, без результатов. Awesomium вообще ругается что из другого потока обращаюсь. А Gecko бесконечно висит, и подписаться на события, или ждать когда загрузится страница бес толку((

Прошу помощи, как быть. Или может вообще другие инструменты посоветуете.

Есть еще мысль использовать AppDomain(.Net remoting), запускать браузеры в разных доменах. Что скажите по этому поводу?

HttpWebRequest - не предлагать т.к. в работе браузера может встретится страница с ajax. Да и вообще нужно имитировать работу человека.

[MTAThread]
    private void testBtn_Click(object sender, EventArgs e)
    {
        Thread t = new Thread(new ThreadStart(delegate {
            GeckoWebBrowser browser = new GeckoWebBrowser();
            browser.Navigate("https://yandex.ru");
            while (browser.Document == null || browser.Document.ReadyState != "complete") {
                Application.DoEvents();
                Thread.Sleep(50);
            }
        }));
        t.Start();            
    }

Этот не возможно дождаться

А это один из вариантов Awesomium

Btn_Click(object sender, RoutedEventArgs e)
    {
        WebView wc = WebCore.CreateWebView(1024, 768);
        Thread t = new Thread(new ThreadStart(delegate {
            wc.Source = new Uri("https://yandex.ru");
            while (wc.IsLoading)
            {
                WebCore.Update();
            }
        }));
        t.Start();
    }

Вот что пишет: The calling thread cannot access this object because a different thread owns it

READ ALSO
Мониторинг изменений в реестре

Мониторинг изменений в реестре

Не выводит запись об изменения в реестре ( вывод в консоль ) По этой статье + примере на программе: RegistryMonitor

286
Подтверждение data-confirm вызывается 2 раза

Подтверждение data-confirm вызывается 2 раза

Перед сохранением хотел сделать подтверждение, прописал data-confirm и теперь окно вызывается 2 раза перед отправкой формы

354
Объединить три масива в один

Объединить три масива в один

Пытаюсь объединить массивы в один, для обеднения взял функцию array_merge у меня получился массив:

414
basic аутентификация для одной папки

basic аутентификация для одной папки

Друзья здравствуйте! Вижу что данная тема еще не освещалась на русверсии данного ресурса в таком формате, по этому прошу подключиться к решению...

375