Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# TabControl的问题_C#_Tabcontrol - Fatal编程技术网

C# TabControl的问题

C# TabControl的问题,c#,tabcontrol,C#,Tabcontrol,我有个问题。我使用了一个TabControl,下面的代码是: MyTabControl.TabPages.Add(patternID, header); MyTabControl.SelectTab(patternID); 但是我在SelectTab(patternID)中得到了KeyNotFoundException。但真正有趣的是,我只有在尝试添加第二个选项卡页面时才会出现这种异常 我错过了什么 InThread(() => { bookBoxControl.TabPages

我有个问题。我使用了一个TabControl,下面的代码是:

MyTabControl.TabPages.Add(patternID, header);
MyTabControl.SelectTab(patternID);
但是我在SelectTab(patternID)中得到了KeyNotFoundException。但真正有趣的是,我只有在尝试添加第二个选项卡页面时才会出现这种异常

我错过了什么

InThread(() =>
{
    bookBoxControl.TabPages.Add(pem.patternID, str);
    playPageMenuItem.Enabled = true;
    bookBoxControl.SelectTab(pem.patternID);
});

private void InThread(MethodInvoker callBack)
{
    lock (this)
    {
        if (IsDisposed)
            return;
        if (InvokeRequired)
            Invoke(callBack); // !!line 118!!
        else
            callBack();
    }
}
我使用InThread()从非图形线程更改表单的元素

堆栈跟踪:

未处理System.Collections.Generic.KeyNotFoundException Message=字典中不存在给定的密钥。 Source=System.Windows.Forms 堆栈跟踪: of System.Windows.Forms.Control.MarshaledInvoke(控件调用方,委托方法,对象[]参数,布尔同步) :/System.Windows.Forms.Control.Invoke(委托方法,对象[]args) :/System.Windows.Forms.Control.Invoke(委托方法) of Project1.Form1.InThread(MethodInvoker回调)of C:\Users\user\Documents\visualstudio 2010\Projects\Project1\Form1.cs:第118行 of Project1.Form1.Run()of C:\Users\user\Documents\visualstudio 2010\Projects\Project1\Form1.cs:Сааа of System.Threading.ThreadHelper.ThreadStart_上下文(对象状态) of System.Threading.ExecutionContext.Run(ExecutionContext ExecutionContext,ContextCallback回调,对象状态) of System.Threading.ThreadHelper.ThreadStart() 内部异常:


TabControl无法引发该异常。错误的选项卡键名称会产生ArgumentNullException。发布异常的堆栈跟踪,并发布复制异常的代码。我认为,当SelectTab(name)方法执行操作时,它会查找TabControl.TabPages以查找具有询问名称的tabpage,但找不到它。请注意,堆栈跟踪上的任何代码都与TabControl无关。Control.Invoke()的异常处理不是很好。通过使用BeginInvoke而不是Invoke,可以获得更易于调试的异常。您要做的第一件事是调试+异常,并勾选CLR异常的抛出复选框。这使得调试器停止在异常位置。我在InThread调用的这3行之前都添加了消息框。此外,在bookBoxControl.TabPages中查找选项卡页只需要在SelectTab(字符串)中。在选择tabpage之前,我已选中bookBoxControl.TabPages.ConsistsKey(字符串)。一切都表明错误在bookBoxControl中。选择Tab(字符串);不要使用消息框来调试这样的问题。使用调试器。找到“调试+异常”对话框了吗?