以编程方式删除选项卡 - 在一个线程上创建的控件不能作为另一个线程上的控件的父级

时间:2014-04-11 18:51:33

标签: c# winforms

我有一个使用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和字符串跟踪它。

0 个答案:

没有答案