在做Winform程序时,经常遇到一个问题就是如何在非UI的线程中更新UI界面,下面是个例子:
首先我们启动一个线程:
Thread td = new Thread(JM);
td.IsBackground = true;
td.Start();
然后我们在线程中做其他的事情,同时需要更新UI
private void JM() { while (true) { string path = ""; lock (Files) { if (Files.Count == 0) { Thread.Sleep(3000); Application.Exit(); break; } path = Files[0].FullName; Files.RemoveAt(0); } if (!string.IsNullOrEmpty(path)) { Common.EncryptFile(path, SavePath, "lainiao"); } Thread.Sleep(500); this.Invoke(AddValue, null); } }
上面这段代码中都在操作文件,每次操作完成后需要更新进度条,所以使用This.Invode的方法来执行更新UI界面.
可以看到AddValue是一个委托实例.
private void AddValueMethod()
{
if (MyBar.Value < MyBar.Maximum)
{
MyBar.Value += 1;
}
else
{
}
}
这段代码才是真正更新UI界面的.