我不是c#的专家,所以请耐心等待我。我的任务是创建一个非常简单的应用程序。我正在编写一些与第三方IVR API接口的代码。一旦用户登录到该API,就创建一个处理器,该处理程序监视该用户的电话队列以进行电话呼叫。这部分代码完美无瑕......电话进来,处理程序事件触发。
当用户登录时,我还会弹出两个Internet Explorer窗口(两个新窗口)。当电话呼叫事件处理程序触发时,我只需要将一个窗口导航到新的URL,然后执行一些javascript到另一个窗口。所以,我通过使用SHDocVw InternetExlorer对象老练,并且一切都很好。然后我将UAC打开到默认级别(项目要求),它或多或少地破坏了我的项目,因为我无法再控制InternetExplorer对象。
通过研究,似乎WebBrowser是与UAC合作的方式(如果我错了,请有人纠正我)。这就是我今天所处的位置。在创建WebBrowser对象后,我无法保持对其的控制。
以下是我创建它的方式:
var th = new Thread(() =>
{
WebBrowser BSWebBrowser = new WebBrowser();
BSWebBrowser.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(BSDocumentCompleted);
BSWebBrowser.Visible = true;
var URL = SomeURL;
BSWebBrowser.Navigate(URL);
Application.Run();
});
th.SetApartmentState(ApartmentState.STA);
th.Start();
然后我运行DocumentCompleted代码,希望将WebBrowser设置为非空的东西:
private void BSDocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
WebBrowser BSWebBrowser = sender as WebBrowser;
if (BSWebBrowser.ReadyState != WebBrowserReadyState.Complete)
{
MessageBox.Show("Browser Not Ready!");
return;
}
else
{
MessageBox.Show("Browser Ready!");
}
}
当我在上面的BSCocumentCompleted代码上调试时,BSWebBrowser不是null,这很好。现在,当有电话呼入时,我尝试将BSWebBrowser导航到另一个URL。我打电话给:
BSWebBrowser.Navigate("somenewURL");
我有几个问题......
以上代码不会直观地弹出Internet Explorer窗口。如果我在导航中的URL后添加true,要打开一个新窗口,我的documentcompleted永远不会触发,我无法保持对WebBrowser的控制。
如果我将上述代码运行为"无窗口" (我不是真的想做,但我只是想弄清楚如何保持对WebBrowser的控制),我得到以下错误:"无法获取&#的窗口句柄39; web浏览器'控制。不支持无窗口ActiveX控件。
任何人对如何正确使用WebBrowser或使用其他UAC兼容方式多次导航Internet Explorer窗口有任何想法?
我谦卑地感激任何帮助。