C# 有没有办法通过调用将新选项卡添加到另一个线程上的tabController?

C# 有没有办法通过调用将新选项卡添加到另一个线程上的tabController?,c#,.net,multithreading,winforms,C#,.net,Multithreading,Winforms,我正在用c语言制作一个WinForms浏览器,它使用制表符系统。为了防止在新选项卡中打开的链接在没有浏览器UI的情况下打开新窗口,我制作了一个LifespanHandler。问题是调用运行时会出现错误 tabControl1.TabPages.Insert(lastIndex,“新选项卡”); 即使它正在运行新选项卡按钮运行的功能。这是密码 寿命管理器: class LifespanHandler:ILifeSpanHandler { 公共事件行动委员会; 公共bool DoClose(IWe

我正在用c语言制作一个WinForms浏览器,它使用制表符系统。为了防止在新选项卡中打开的链接在没有浏览器UI的情况下打开新窗口,我制作了一个LifespanHandler。问题是调用运行时会出现错误

tabControl1.TabPages.Insert(lastIndex,“新选项卡”);
即使它正在运行新选项卡按钮运行的功能。这是密码

寿命管理器:

class LifespanHandler:ILifeSpanHandler
{
公共事件行动委员会;
公共bool DoClose(IWebBrowser、chromiumWebBrowser、IBrowser浏览器)
{
返回true;
}
创建后的公共无效(IWebBrowser、IWebBrowser、IBrowser浏览器)
{
}
关闭前的公用作废(IWebBrowser chromiumWebBrowser、IBrowser浏览器)
{
}
public bool OnBeforePopup(IWebBrowser chromiumWebBrowser、IBrowser browser、IFrame frame、string targetUrl、string targetFrameName、WindowOpenDisposition targetDisposition、bool用户手势、IPopupFeatures popupFeatures、IWindowInfo windowInfo、IBrowser设置浏览器设置、ref bool noJavascriptAccess、out IWebBrowser新浏览器)
{
requestNewTab?.Invoke(targetUrl);
newBrowser=null;
返回true;
}
}
在tabController上制作选项卡的零件:

public void newTab(字符串url)
{
LifespanHandler LifespanHandler=新的LifespanHandler();
lifespanHandler.requestNewTab+=newTab;
var lastIndex=this.tabControl1.TabCount-1;
this.tabControl1.TabPages.Insert(lastIndex,“New Tab”);
this.tabControl1.SelectedIndex=lastIndex;
tabControl1.SelectedTab.Text=“新建选项卡”;
{
我试着让它成为一个调用newTab的函数,但结果是一样的。 错误:
System.ArgumentException:“在一个线程上创建的控件不能作为另一个线程上控件的父对象。”

您可以尝试使用方法调用程序,因此在另一个线程中调用UI对象时,使用不同的线程不会有问题

    private void MyFunction(string url)
    {
        MethodInvoker inv = delegate
        {
          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   ";
        };

        this.Invoke(inv);

    }

它没有抛出一个错误,而是打开了我用来打开在新标签页中打开的弹出窗口/链接的东西。不确定“东西”指的是什么