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可以参考