using System; using System.Collections.Generic; using System.ComponentModel; using System.Drawing; using System.Linq; using System.Windows.Forms; using System.Threading; namespace doWorker { public partial class Form1 : Form { delegate void MyDelegate(int value); Thread t;//new一个新线程,以便用来更新ui的显示
int i = 0; public Form1() { InitializeComponent(); } // 在新的线程中做“需要长时间做的”工作 private void button1_Click(object sender, EventArgs e) { t = new Thread(doWork); t.Start(); } // 要长时间做的工作 void doWork() { MyDelegate d = new MyDelegate(setValue); while (true) { ++i; //----WPF---added by wonsoft.cn--- this.Dispatcher.Invoke(d, i); Thread.Sleep(100); } } // 更新用户界面 void setValue(int value) { label1.Text = value.ToString(); } // 终止线程的执行 private void button2_Click(object sender, EventArgs e) { t.Abort(); } } }
要想让主线程更新UI的显示,可以通过新建一个线程,来控制算法,在适当的时间去更新UI的线程。
具体的Dispatcher可以参考http://www.cnblogs.com/chenxizhang/archive/2010/03/25/1694604.html