天天看點

Winform實作背景推送,資料跨線程實時重新整理控件

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