我有一个使用for循环并添加标签的应用。这是代码。
TextBox logtextbox = new TextBox();
logtextbox.Name = "textBox1_" + string1234[0]; //string.Format("logThread{0}", i);
logtextbox.Multiline = true;
logtextbox.Size = new System.Drawing.Size(587, 404);
logtextbox.Location = new System.Drawing.Point(8, 6);
logtextbox.Anchor = (AnchorStyles.Left | AnchorStyles.Bottom | AnchorStyles.Right | AnchorStyles.Top);
string title = string1234[0];
TabPage myTabPage = new TabPage(title);
myTabPage.Name = string.Format("tabthread{0}", i);
myTabPage.Controls.Add(logtextbox);
TabControl1.TabPages.Add(myTabPage);
botThread = new Thread(() => mainThread(string123, i));
botThread.IsBackground = true;
botThread.Name = string.Format("123Thread{0}", i);
_threads.Add(botThread);
botThread.Start();
此代码工作正常,并添加一个带有文本框的选项卡,线程启动。但是当我尝试结束线程时,删除文本框并删除选项卡我会收到错误。
这是我使用的代码
public void KillThread(int index, int index1, string textname)
{
string id = string.Format("taggerThread{0}", index);
foreach (Thread thread in _threads)
{
if (thread.Name == id)
thread.Abort();
}
string id1 = string.Format("tabthread{0}", index1);
foreach (TabPage tab in TabControl1.TabPages)
{
if (tab.Name == id1)
{
tab.Controls.RemoveByKey(textname);
TabControl1.TabPages.RemoveByKey(id1);
}
}
程序中断,VS 12在调试时给出了这个错误。
未处理的类型' System.ArgumentException'发生在System.Windows.Forms.dll
中Additional information: Controls created on one thread cannot be parented to a control on a different thread.
当我打破程序TabControl1.TabPages.Add(myTabPage);
如何停止线程,删除选项卡和所有控件。它是一个多线程的应用程序,所以我用id和字符串跟踪它。