c# - WebBrowser - 重用控件

时间:2014-04-11 16:36:26

标签: c# .net

我不是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");

我有几个问题......

  1. 以上代码不会直观地弹出Internet Explorer窗口。如果我在导航中的URL后添加true,要打开一个新窗口,我的documentcompleted永远不会触发,我无法保持对WebBrowser的控制。

  2. 如果我将上述代码运行为"无窗口" (我不是真的想做,但我只是想弄清楚如何保持对WebBrowser的控制),我得到以下错误:"无法获取&#的窗口句柄39; web浏览器'控制。不支持无窗口ActiveX控件。

  3. 任何人对如何正确使用WebBrowser或使用其他UAC兼容方式多次导航Internet Explorer窗口有任何想法?

    我谦卑地感激任何帮助。

0 个答案:

没有答案