我的一条线程(主)用于显示窗体控件 InitializeComponent();
另一条(次)用于给窗体的控件填充数据。
为什么有的能够填充上,而有的就干脆连控件都不给显示了 Control.CheckForIllegalCrossThreadCalls = false;用个这条语句防止两条线程操作一个控件的错误提示

解决方案 »

  1.   

    借楼主的帖子发下我的问题,如有打扰见谅 http://topic.csdn.net/u/20090825/15/71d11f43-08a6-4f04-8152-a0737dddd2d4.html?seed=1079724398&r=59322234#r_59322234
      

  2.   

    给楼主一个多线程修改UI的例子吧(仅作参考)
    public partial class Form1 : Form
    {
            private delegate void UIOperater(string str);
            Thread thrd;        public Form1()
            {
                InitializeComponent();            
            }        private void btnOK_Click(object sender, EventArgs e)
            {
                //打开一个线程  
                if (thrd == null || !thrd.IsAlive)
                {
                    thrd = new Thread(new ThreadStart(ChangeBtnTxt));
                    thrd.Start();
                }
            }        private void ChangeBtnTxt()
            {
                uint i = 0;
                while (true)
                {
                    i++;
                    i = i % 10000;
                    this.Invoke(new UIOperater(SetBtnTxt), new object[] { i.ToString() });                
                    Thread.Sleep(100);
                }
            }        private void SetBtnTxt(string str)
            {
                this.btnOK.Text = str;            
            }
    }
      

  3.   

     new Thread(delegate()
                { 
                //TODO~~~~
                }).Start();
    大侠,这样写可不可以?
      

  4.   

    因为有的控件不是线程安全的
    你的工作线程在操作UI线程的时候,UI线程可能也在操作该控件,小概率事件导致该控件处于一个无效状态,那么UI就罢工了要进行跨线程操作UI,一般是把实际操作控件的工作post到UI线程中,让UI现成去自己搞给你个完整的例子:
    http://dev.tot.name/csharp/html/20090327/20090327145402.htm
      

  5.   

    InitializeComponent()是加载和初始化控件 
    不知道你的数据线程是不是在InitializeComponent()调用前就开始了 
    可能的原因是 两个线程的同步问题
    建议 在InitializeComponent()方法完成后在Start数据加载的线程
    或者同步InitializeComponent方法,不过效率更低