在c#中插入浏览器面板时出现错误

本文关键字:错误 插入 浏览器 | 更新日期: 2023-09-27 18:14:44

我正在开发一个应用程序,我需要在面板内插入一个web浏览器。在这样做的同时,我在设计师代码中得到错误"无法获得'WebBrowser'控件的窗口句柄"。不支持无窗口的ActiveX控件。我已经把代码在stthread中运行它。但在那之后,我得到了错误的"交叉线程…"

Thread newThread = new Thread(newThreadStart(MethodToCallCOMMethod));
newThread.SetApartmentState(ApartmentState.STA);
newThread.Start();
private void MethodToCallCOMMethod()
        {
            this.webBrowser1 = new System.Windows.Forms.WebBrowser();
            this.webBrowser2 = new System.Windows.Forms.WebBrowser();
            if (this.InvokeRequired)
            {
                this.BeginInvoke(new MethodInvoker(delegate
                                {
                                    this.p_bottom.Controls.Add(this.webBrowser2);
                                }));
            }
            else
            {
                this.p_bottom.Controls.Add(this.webBrowser2);
            }
        }

使用invokerrequired后,我仍然得到"跨线程错误:-控制"从另一个线程访问,它是在c#中创建的",如何解决它…?

在c#中插入浏览器面板时出现错误

问题是你在不同的线程中创建webbrowser,一般情况下你不应该在gui线程之外创建或编辑控件。

所以要么在其他地方创建webBrowser1和2(在GUI线程中),要么把代码放在MethodInvoker委托(在GUI线程中运行)

如果它说the current thread is not in a single-threaded apartment,那么要么你的Main函数看起来不像这样(VS默认创建),要么你试图从另一个线程创建它们:

[STAThread]
static void Main()
{
    Application.EnableVisualStyles();
    Application.SetCompatibleTextRenderingDefault(false);
    Application.Run(new Form1());
}