开发者论坛

 找回密码
 注册 (请使用非IE浏览器)
查看: 2738|回复: 2

[求助] timer跨线程更新UI卡滞问题

[复制链接]

0

精华

0

贡献

0

赞扬

帖子
9
软币
86
在线时间
8 小时
注册时间
2018-9-8
发表于 2018-9-8 12:27:03 | 显示全部楼层 |阅读模式
本帖最后由 greenhand 于 2018-9-8 15:23 编辑

各位大神好!
本人采用timer每100ms从传感器采集一次数据,然后展示在主界面的DevExpress的ChartControl上。刚开始还可以,但基本上400-500秒左右界面就卡死了,请各位大神来研究一下哈。。。
//一个跨线程更新UI的委托
public Action UpdateUiAction;
。。。
。。。
            if (UpdateUiAction == null)
            {
                UpdateUiAction = UpdateTimeMethod;
                UpdateUiAction += UpdateChartMethod;
            }

//更新UI的函数
        public void UpdateTimeMethod()
        {
            _textEdittime.Text = _time.ToString("f3");
        }

        public void UpdateChartMethod()
        {
            _chartcontrol.RefreshData(); //此处的RefreshData是ChartControl控件的自带成员函数
        }


//这是timer,非winform中的那个timer     
   private readonly System.Timers.Timer _datatimer = new System.Timers.Timer();

            _datatimer.Elapsed += GetRealTimeData;
            _datatimer.Interval = 100;
            _datatimer.AutoReset = true;
            _datatimer.Enabled = false;

//这是timer的定时动作,采集数据,并展示在主界面的ChartControl上
        private void GetRealTimeData(object sender, ElapsedEventArgs e)
        {
            if (Interlocked.Exchange(ref _intTimer, 1) == 0)
            {
                var p = new APoint
                {
                    Time = Math.Round((DateTime.Now - _timezero).TotalSeconds, 3),
                    YouGangWeiYi = Math.Round(_sdz300.CurrentData.Pos, 3),
                    Load = Math.Round(Math.Abs(_sdz300.CurrentData.Load), 3)
                };
                _listallpoint.Add(p);//_listallpoint是ChartControl的绑定数据源,是一个List<APoint>,每采集一次数据,就向_listallpoint添加一个元素
                _time = p.Time;
                BeginInvoke(UpdateUiAction);
                Interlocked.Exchange(ref _intTimer, 0);
            }
        }

这样的代码,定时器开始工作后,一开始很正常,很流畅,约四五百秒后(数据源Count数量到了四五千左右),界面会越来越卡。。。
自己试了一下,卡顿主要是由于UpdateUiAction += UpdateChartMethod;造成的——这句主要是更新ChartControl。。。
请问各位大神,是俺的代码有问题还是ChartControl处理不了大数据(比如数据源慢慢增加至四五千个数据)?
回复

使用道具 举报

0

精华

0

贡献

0

赞扬

帖子
9
软币
86
在线时间
8 小时
注册时间
2018-9-8
 楼主| 发表于 2018-9-8 15:28:15 | 显示全部楼层
上网查了一些资料,说为了提高ChartControl控件的性能,可以设定一些属性:            _chartControl.CacheToMemory = true;
            _chartControl.RefreshDataOnRepaint = false;
            _chartControl.RuntimeHitTesting = false;
可这些都用了,也没有用。。。
回复

使用道具 举报

0

精华

0

贡献

0

赞扬

帖子
9
软币
86
在线时间
8 小时
注册时间
2018-9-8
 楼主| 发表于 2018-9-8 21:15:14 | 显示全部楼层
大神啊,请现身吧。。。我都已经疯狂1周啦。。。
回复

使用道具 举报

Archiver|手机版|小黑屋|开发者网 ( 苏ICP备08004430号-2 )
版权所有:南京韵文教育信息咨询有限公司

GMT+8, 2024-3-29 05:20

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表