public Form1()
        {
            InitializeComponent();
        }
        public delegate void CrossDelegate();
        private void button1_Click(object sender, EventArgs e)
        {
            Thread newThread = new Thread(new ThreadStart(SetLabel));
            newThread.IsBackground = true;
            newThread.Start();
        }
        private void SetLabel()
        {            CrossDelegate dl = new CrossDelegate(Done);
            this.Invoke(dl);         }
        private void Done()
        {            for (int j = 0; j < 100; j++)
            {
               this.label1.Text=j.ToString();
               Thread.Sleep(1000);
            }
        }为什么执行就卡界面?

解决方案 »

  1.   

    因为你的this.Invoke把dl放到了UI线程里执行了。
    this.Invoke只在需要访问UI时才调用为佳。
    比如 this.Invoke(()=>{ this.label1.Text=j.ToString(); });
      

  2.   

      this.label1.Invoke(dl); 这样????那应该怎么写!
      

  3.   

    你这个Done相当于在主线程中执行的,当然卡死了
      

  4.   


            public delegate void CrossDelegate(string s);
            private void SetLabel(string s)
            {
                if (this.textBox1.InvokeRequired)
                {
                    this.textBox1.Invoke(new CrossDelegate(SetLabel), s);
                    return;
                }
                this.textBox1.Text = s;
                        }
            private void Done()
            {
                for (int j = 0; j < 100; j++)
                {                SetLabel(j.ToString());
                    Thread.Sleep(1000);
                }
            }
            private void button1_Click(object sender, EventArgs e)
            {
                Thread newThread = new Thread(new ThreadStart(Done));
                newThread.IsBackground = true;
                newThread.Start();
            }