private void ShowContent(string RecContent)
        {
            if (this.label2.InvokeRequired)//如果在UI主线程操作
            {
                this.label2.Invoke(new LabelDelegate(ShowContent), new object[] { RecContent });
            }
            else
                this.label2.Text=RecContent;
        } private void button3_Click(object sender, EventArgs e)
        {
            for(int i=0;i<100;i++)
            { 
                ShowContent(i.ToString());
                System.Threading.Thread.Sleep(500);
            }
        }点击按钮后窗体还卡不是说用 了Invoke 就好了吗?(急)(急)(急)(急)

解决方案 »

  1.   

    http://msdn.microsoft.com/en-us/library/ms951089.aspx
    嗷嗷帅,嘎嘎
      

  2.   

    你代码还是在UI线程上执行ShowContent()啊,
    要在新建的线程上执行ShowContent()才行,最好把invoke改为begininvoke,这样一定不卡
      

  3.   

     private void button2_Click(object sender, EventArgs e)
           {           Thread start = new Thread(new ThreadStart(Start));
               start.Start();
                        }
            private void Start()
            {
                int i = 0;
                while (i < 10)
                {
                    i++;
                    ShowContent(i.ToString());
                    Thread.Sleep(500);
                }
            }
    用多线程吧,for一直在执行
      

  4.   

    换个思路,让其他访问控件的线程执行一个委托,此委托中Invoke
      

  5.   

    backgroundWorker 配合 control.invoke 比较好。 或者单起线程
      

  6.   


      private void ShowContent(string RecContent)
            {
                if (this.label2.InvokeRequired)//如果在UI主线程操作
                {
                    this.label2.Invoke(new LabelDelegate(ShowContent), new object[] { "已经处理了:" + RecContent });
                }
                else
                    this.label2.Text = "已经处理了:" + RecContent;
                Application.DoEvents();
            }