public partial class Form1 : Form
    {
        private delegate void ThreadWork(int i);
        Thread thread;        public Form1()
        {
            InitializeComponent();
        }
        private void button1_Click_1(object sender, EventArgs e)
        {
            this.richTextBox1.Text = "程序开始:\r\n";
            UpdateText();
            mll();
        }        public void UpdateText()
        {
            thread = new Thread(new ThreadStart(CrossThreadFlush));
            //thread.IsBackground = true;
            thread.Start();
        }        public void mll()
        {      
            for (int m = 1; m < 5; m++)
            {
                this.richTextBox2.Text = string.Format("第{0}个\t{1:mm-ss}\r\n", m, DateTime.Now) + this.richTextBox2.Text;
                this.richTextBox2.Refresh();
                Thread.Sleep(500);
            }
        }        private void CrossThreadFlush()
        {
            while (true)
            {                 for (int i = 1; i < 100; i++)
                {
                    ThreadFunction(i);
                    Thread.Sleep(500);
                }
            }
        }        private void ThreadFunction(int i)
        {
            if (this.richTextBox1.InvokeRequired)//等待异步 
            {
                ThreadWork fc = new ThreadWork(ThreadFunction);
                this.Invoke(fc, new object[1] { i });
            }
            else
            {
                this.richTextBox1.Text = string.Format("第{0}个\t{1:mm-ss}\r\n", i, DateTime.Now) + this.richTextBox1.Text;
                this.richTextBox1.Refresh();            }
        }
    }

解决方案 »

  1.   

    因为UI操作是同步的,无论计算是多少个线程,UI显示只有一个线程在处理。
      

  2.   


    本来是想在第一个textbox(richTextbox1)框显示委托的thread线程的方法,在richTextbox2显示主线程mll()方法,本来预想是两个文本框同时显示执行的。可是发现只有当主线程mll()方法执行完之后才会执行UpdateText();这是为什么呢??
      

  3.   

    fangxinggood    麻烦可以解释的详细一点么?最近刚刚学委托和异步处理    不大明白呢
      

  4.   

    你的线程里面要调用ui,所以要等ui线程有空。如果你的线程光是取数据,那就和ui没关系