天天看点

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