在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#中创建的",如何解决它…?
问题是你在不同的线程中创建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());
}