2016-03-18 12 views
4

Я загрузил двоичную дистрибуцию CEF (chromuim embedded framework), которая поставляется с (cefclient cefsimple) примерами C++, и реализовала, что cefclient может изменять настройки прокси-сервера во время выполнения.CefSharp 3 set proxy at Runtime

И ключ для этого - захватить RequestContext и вызвать функцию SetPreference.

на CefClient все работает просто приятно.

но при вызове CefSharp SetPreference всегда возвращает false, а также HasPreference возвращает false для имени привилегии «прокси».

+1

Перейти на 'Gitter', читать по разговору со вчерашнего дня, вам нужны все детали. Вероятно, вы вызываете неправильный поток, есть только один поток, который будет работать. https://gitter.im/cefsharp/CefSharp – amaitland

+0

Большое спасибо, интересно было узнать, как запустить код в соответствующем потоке, но я был отвлечен дефрагментами кода между C++ и C# wrappers. – Aladdin

ответ

5

благодаря amaitland правильный способ активно Inforce изменения запроса контекста prefrences, чтобы запустить код на CEF UIThread следующим образом:

Cef.UIThreadTaskFactory.StartNew(delegate { 
     var rc = this.browser.GetBrowser().GetHost().RequestContext; 
     var v = new Dictionary<string, object>(); 
     v["mode"] = "fixed_servers"; 
     v["server"] = "scheme://host:port"; 
     string error; 
     bool success = rc.SetPreference("proxy", v, out error); 
     //success=true,error="" 
    }); 
+0

Я получаю «попытку изменить ссылку, которая не может быть изменена пользователем» – jLynx

+0

@amaitland не могли бы вы описать, где и как выше? Я хочу изменить прокси-сервер во время выполнения после Cef.Initialized, поэтому, пожалуйста, дайте мне знать. Спасибо – confusedMind

+0

Я пробовал выше, но ничего не происходит, он по-прежнему использует мой ip по умолчанию, любые предложения? – confusedMind

0

если кто-нибудь нужен любой другой soulition я нашел это решение.

Cef.UIThreadTaskFactory.StartNew(delegate 
     { 
      string ip = "ip or adress"; 
      string port = "port"; 
      var rc = this.browser.GetBrowser().GetHost().RequestContext; 
      var dict = new Dictionary<string, object>(); 
      dict.Add("mode", "fixed_servers"); 
      dict.Add("server", "" + ip + ":" + port + ""); 
      string error; 
      bool success = rc.SetPreference("proxy", dict, out error); 

     });