【发布时间】:2021-06-17 07:58:32
【问题描述】:
我正在用 c# 制作一个使用选项卡系统的 WinForms 浏览器。为了防止在新选项卡中打开的链接在没有浏览器 UI 的情况下打开新窗口,我制作了 LifespanHandler。问题是当 Invoke 运行时出错
tabControl1.TabPages.Insert(lastIndex, "New Tab");
即使它正在运行新标签按钮运行的功能。这是代码
LifespanHandler:
class LifespanHandler : ILifeSpanHandler
{
public event Action<string> requestNewTab;
public bool DoClose(IWebBrowser chromiumWebBrowser, IBrowser browser)
{
return true;
}
public void OnAfterCreated(IWebBrowser chromiumWebBrowser, IBrowser browser)
{
}
public void OnBeforeClose(IWebBrowser chromiumWebBrowser, IBrowser browser)
{
}
public bool OnBeforePopup(IWebBrowser chromiumWebBrowser, IBrowser browser, IFrame frame, string targetUrl, string targetFrameName, WindowOpenDisposition targetDisposition, bool userGesture, IPopupFeatures popupFeatures, IWindowInfo windowInfo, IBrowserSettings browserSettings, ref bool noJavascriptAccess, out IWebBrowser newBrowser)
{
requestNewTab?.Invoke(targetUrl);
newBrowser = null;
return true;
}
}
在tabController上制作标签的部分:
public void newTab(String url)
{
LifespanHandler lifespanHandler = new LifespanHandler();
lifespanHandler.requestNewTab += newTab;
var lastIndex = this.tabControl1.TabCount - 1;
this.tabControl1.TabPages.Insert(lastIndex, "New Tab");
this.tabControl1.SelectedIndex = lastIndex;
tabControl1.SelectedTab.Text = "New Tab ";
{
我尝试将其设为调用 newTab 但结果相同的函数。
错误:
System.ArgumentException: 'Controls created on one thread cannot be parented to a control on a different thread.'
【问题讨论】:
标签: c# .net multithreading winforms