1. 用委托事件實作資料實時推送并重新整理頁面,适用于前台和背景松耦合但沒有分布式部署的情況。
2. 首先定義一個全局的委托事件
public class Notice
{
public delegate void MessageRecieved(DataTable dt);//定義委托
public static event MessageRecieved OnMessageRecieved;//用委托定義事件
<span style="white-space:pre"> </span>//觸發事件的方法
public static void MessageSend(DataTable dt)
{
if(OnMessageRecieved != null)
{
OnMessageRecieved(dt);
}
}
}
3. 背景線程調用MEssageSend方法
<span style="white-space:pre"> </span>//事件推送,跨線程 BY ZZH
Notice.MessageSend(CalDataTable);
4. 在實時重新整理的界面裡注冊委托方法,注冊的數量沒限制
<span style="white-space:pre"> </span>//定義委托用來處理頁面重新整理,因為這是跨線程的 BY ZZH
public delegate void UpdateControls(DataTable dt);
UpdateControls upd = null;
private void Form1_Load(object sender, EventArgs e)
{
Notice.OnMessageRecieved += OnMessageReceived;
upd = new UpdateControls(ChangeLabels);
}
//這裡調用窗體的Invoke方法,也就是說用窗體的線程執行背景線程委托的方法
public void OnMessageReceived(DataTable calDataTable)
{
this.BeginInvoke(upd, calDataTable);
}
<span style="white-space:pre"> </span>private void ChangeLabels(DataTable dt)
{
//控件綁定。。。。。
}
如果想要實作分布是部署跨平台,可參考這篇文章 http://blog.csdn.net/xiaoyiyz/article/details/47616397