WPF 多线程---- 子线程操作界面主线程的元素

1 在代码中开启一个子线程 

            Thread cabService = new Thread(new ThreadStart(<strong>dataReceiver</strong>));
            cabService.Start();
每隔2s ,产生一个数据

        public void dataReceiver()
        {
            while(true)
            {
                x = new Random((int)(System.DateTime.Now.Second)).Next(3, 50);
               
                Console.WriteLine("产生数据!"+x);
                if(monitor!=null)
                {
                    <strong>monitor</strong>(x);
                }
                Thread.Sleep(2000);
            }
        }


2 定义代理和事件 

 

 public delegate void <strong>DataMonitor</strong>(int data);
 public event  <strong>DataMonitor</strong> monitor ;


每次是产生数据,就会触发事件链条 ,去执行monitor(x) 


3 在monitor  上面添加处理

    monitor += new DataMonitor(cab.<strong>UpdateChart</strong>);

cab.updateChart 就是需要更新界面图标数据的代码

4 在Cab类当中顶一个这样一个函数,实现界面更新 

        public void UpdateChart(int x)
        {
            Action a = new Action(<strong>updateSerial</strong>);
            data = x;
            cab_chart.Dispatcher.BeginInvoke(a);
        }

  public void <strong>updateSerial</strong>()
        {          
            for (int i = _pointCount - 1; i > 0;i-- )
            {
                dataSeries.DataPoints[i-1] = dataSeries.DataPoints[i];
            }
            DataPoint datapoint = new DataPoint();
            datapoint.AxisXLabel = (_pointCount - 1) + "";
            datapoint.YValue = data;
            dataSeries.DataPoints.Add(datapoint);
            cab_chart.Series.Clear();
            cab_chart.Series.Add(dataSeries);
        }


5 这和android的线程模型极为相似,子线程的数据都需要一个Handler 来执行界面更新 ,ok!



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值