遇到问题-UI界面无响应,多线程解决UI界面无响应问题

来源:互联网 发布:淘宝网如何退货 编辑:程序博客网 时间:2024/04/27 23:28

当处理过程比较复杂,或者耗时较长时,容易引起UI界面无响应.

比如我们执行一个复杂的运算,要随时在界面上显示它的结果.但是UI界面卡死了,不能随时看到运算的结果.


这种情况下 我们可以另开线程1,把运算的过程放到线程1中启动,然后用委托唤醒显示语句.


引用线程命名空间

using System.Threading;


//定义线程 private Thread workerThread1 = null;         private void button3_Click(object sender, EventArgs e)        {//给线程赋值,启动            workerThread1 = new Thread(new ThreadStart(make_number));            workerThread1.Start();        }//定义委托,显示函数        private delegate void setStatusDelegate(string iteration, string error);        private void setStatus(string a, string b)        {            this.label11.Text = a.ToString();            this.label12.Text = b.ToString();                  }//定义运算函数,也就是运算的过程.里面要用委托调用显示函数.        private void make_number()        {          int a=0;         int b=0;        for(int i=0;i<100;i++){//用委托调用函数          this.Invoke(new setStatusDelegate(setStatus), a.ToString(), b.ToString()); a++;b=b+2;              }} 



为什么要用委托,而不是直接在make_number函数里 写

this.label1.text=a.tostring();

this.label2.text=b.tostring();

因为会报错,只有form窗体的线程中才能给窗体的控件赋值,线程1不能直接赋值

所以线程1中只是唤醒显示函数,显示函数仍是处于窗体线程中.

原创粉丝点击