C# TabControl的问题
我有个问题。我使用了一个TabControl,下面的代码是:C# TabControl的问题,c#,tabcontrol,C#,Tabcontrol,我有个问题。我使用了一个TabControl,下面的代码是: MyTabControl.TabPages.Add(patternID, header); MyTabControl.SelectTab(patternID); 但是我在SelectTab(patternID)中得到了KeyNotFoundException。但真正有趣的是,我只有在尝试添加第二个选项卡页面时才会出现这种异常 我错过了什么 InThread(() => { bookBoxControl.TabPages
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(字符串);不要使用消息框来调试这样的问题。使用调试器。找到“调试+异常”对话框了吗?