C#多线程更新界面有多种方法:
1. 使用Application.DoEvents();
2. 使用委托delegate
3. 使用BackgroundWorker; 最偷懒的办法(Winform/Silverlight通用)
4. 设置Control.CheckForIllegalCrossThreadCalls为false,相当于不检测线程之间的冲突
5. Dispatcher.BeginInvoke--Silverlight的独门秘籍
6. 利用SynchronizationContext上下文 -- 最神秘的方法(Winform/Silverlight能用)
先记录一种方法,使用委托来更新UI,其他的方法暂时还没研究:
1、
public delegate void LoadDataDelegate();
public LoadDataDelegate loadDelegate;
public void LoadContent()
{
loadDelegate = new LoadDataDelegate(LoadData);
this.BeginInvoke(loadDelegate);
}
private void InitProvinceData()
{
//这里面就可以对UI进行更新了
}
public delegate void ShowWeatherDelegate();
private void ShowWeather()
{
if (weatherInterface.InvokeRequired)
{
ShowWeatherDelegate showDelegate = new ShowWeatherDelegate(ShowWeather);
this.BeginInvoke(showDelegate);
}
else
{
weatherInterface.Visible = true;
waitInterface1.Visible = false;
}
}