2016-03-18 25 views
4

我下载了CEF(chromuim嵌入式框架)二进制分布自带的(cefclient & cefsimple)C++示例,并且实现了cefclient可以在运行时更改代理设置。CefSharp 3套代理在运行时

而关键是要抓住RequestContext并调用SetPreference函数。

在CefClient上都很好用。

但在CefSharp上调用SetPreference总是返回false,并且HasPreference对于首选项名称“proxy”返回false。

+1

跳上'Gitter',阅读昨天的对话,了解你所需要的所有细节。可能你在不正确的线程上调用,只有一个线程可以工作。 https://gitter.im/cefsharp/CefSharp – amaitland

+0

非常感谢,有人想知道如何在适当的线程上运行代码,但是我被C++和c#包装器之间的代码歧义分心了。 – Aladdin

回答

5

感谢amaitland适当的方式,积极有效保单变更请求上下文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); 

     });