/// <summary>
        /// 窗体线程分离出去
        /// </summary>
        public void ThreadSay(object text) {
            if (clickSayModels(Convert.ToString(HelperNumber.UsersNames)))
            {
                say = new Say();
                string cd = Convert.ToString(text);
                string[] tt = cd.Split(',');
                say.label1.Text = tt[1].ToString();
                say.label2.Text = tt[0].ToString();
                say.Text = tt[1].ToString();
                say.Name = Convert.ToString(HelperNumber.UsersNames);
                //say.Owner = this;
                sayformlist.Add(say);
                say.ShowDialog();
            }
            else
            {
                say = (Say)sayformlist[Convert.ToInt32(orderSSort)];                if (say.WindowState == FormWindowState.Minimized)//判断是否最小化
                {
                    say.WindowState = FormWindowState.Normal;//回到原装
                }
                say.Show();
                say.Focus();
            }
        }
       
        /// <summary>
        /// 判断聊天窗体是否存在
        /// </summary>
        /// <param name="click"></param>
        /// <returns></returns>
        public bool clickSayModels(string click) {
            orderSSort = "0";
            try
            {
                int num = 0;
                foreach (Form f in sayformlist)
                {
                    num++;
                    orderSSort = Convert.ToString(num - 1);
                    if (f.Name.Equals(click)) {
                        //f.Activate();
                        return false;
                    }
                }
                return true;
            }
            catch (Exception ex) {
                return true;
            }
        }        /// <summary>
        /// 删除聊天窗体
        /// </summary>
        /// <param name="name"></param>
        public static void RemodelDeleteSay(string name) {
            orderSSort = "0";
            try
            {
                int num = 0;
                foreach (Form f in sayformlist)
                {
                    num++;
                    orderSSort = Convert.ToString(num - 1);
                    if (f.Name.Equals(name))
                    {
                        sayformlist.RemoveAt(Convert.ToInt32(orderSSort));
                    }
                }
            }
            catch (Exception ex)
            {
               
            }
        }
//调用
Thread th = new Thread(ThreadSay);
                //object text = dicitiong;
                th.Start(dicitiong);

解决方案 »

  1.   

    不要跨线程操作控件 可以使用委托如 say.label1.Text = tt[1].ToString();
    改为 LabelTextChange(say.label1,tt[1].ToString());        // 控制Label
            public delegate void LabelChangeCallBack(Label tx, string value);
            public static void LabelTextChange(Label tx, string value)
            {
                if (tx.InvokeRequired)
                {
                    LabelChangeCallBack outdelegate = new LabelChangeCallBack(LabelTextChange);
                    tx.BeginInvoke(outdelegate, new object[] { tx, value });
                }
                else
                {
                    tx.Text = value;
                }
            }
      

  2.   

    也可以在使用线程前设置如下属性,但不推荐这种
    System.Windows.Forms.Control.CheckForIllegalCrossThreadCalls = false;