为了账号安全,请及时绑定邮箱和手机立即绑定

我如何让 X 轴从 0 开始并每秒更新而不是使用当前时间(DateTime)?

我如何让 X 轴从 0 开始并每秒更新而不是使用当前时间(DateTime)?

C#
ITMISS 2022-12-31 14:03:35
我正在尝试创建一个测量系统,可以使用 LiveCharts 测量 Y 轴上的值和 X 轴上的时间。我使用Constant Changes作为基础来创建我的图表,但我希望我的 X 轴从 0 秒开始,而不是像示例中那样从当前时间开始。我已经尝试过如何使用 Livecharts 使 x 轴从 0 开始并有 2 秒的步长,而不是盯着程序启动的第二秒?但我无法让它与我的程序一起工作。我想做他们在上面链接的线程中做的同样的事情,但无法让它工作。我的输出/它看起来如何代码隐藏:        public void init()        {            var mapper = Mappers.Xy<ValueRandomizerForTest>().X(model =>              model.DateTime.Ticks).Y(model => model.Valuefordate);            Charting.For<ValueRandomizerForTest>(mapper);            ChartValues = new ChartValues<ValueRandomizerForTest>();            DateTimeFormatter = value => new                  DateTime((long)value).ToString("ss");            AxisStep = TimeSpan.FromSeconds(1).Ticks;            AxisUnit = TimeSpan.TicksPerSecond;            SetAxisLimits(DateTime.Now);        }public void read()        {            var r = new Random();            while (isreading)            {                Thread.Sleep(550);                var now = DateTime.Now;                var test = now.Second;                _trend = r.Next(1, 100);                if(ChartValues.Count == 0)                {                }                ChartValues.Add(new ValueRandomizerForTest                {                    DateTime = now,                    Valuefordate = _trend                });                SetAxisLimits(now);                //lets only use the last 150 values                if (ChartValues.Count > 150)                {                    ChartValues.RemoveAt(0);                }            }        }        public void SetAxisLimits(DateTime now)        {            AxisMax = now.Ticks + TimeSpan.FromSeconds(1).Ticks; //Axis is moving 1 second ahead            AxisMin = now.Ticks - TimeSpan.FromSeconds(5).Ticks;         }
查看完整描述

1 回答

?
吃鸡游戏

TA贡献1829条经验 获得超7个赞

见内联评论:


    private long startTimeTicks;

    public void init()

    {

        var mapper = Mappers.Xy<ValueRandomizerForTest>().X(model => 

         model.DateTime.Ticks).Y(model => model.Valuefordate);

        Charting.For<ValueRandomizerForTest>(mapper);

        ChartValues = new ChartValues<ValueRandomizerForTest>();

        DateTimeFormatter = value => new 

             DateTime((long)value).ToString("ss");

        AxisStep = TimeSpan.FromSeconds(1).Ticks;


        AxisUnit = TimeSpan.TicksPerSecond;


        var currentTime = DateTime.Now;

        startTimeTicks = currentTime.Ticks; // store start time

        SetAxisLimits(currentTime);

    }


    public void read()

    {

        var r = new Random();


        while (isreading)

        {

            Thread.Sleep(550);

            var now = DateTime.Now;

            var test = now.Second;


            _trend = r.Next(1, 100);


            if(ChartValues.Count == 0)

            {

            }


            ChartValues.Add(new ValueRandomizerForTest

            {

                DateTime = now - new TimeSpan(startTimeTicks),

                Valuefordate = _trend

            });


            SetAxisLimits(now);


            //lets only use the last 150 values

            if (ChartValues.Count > 150)

            {

                ChartValues.RemoveAt(0);

            }

        }

    }


    public void SetAxisLimits(DateTime now)

    {

        long offsetTicks = now.Ticks - startTimeTicks; // compute offset ticks from program start (at call from init() this calculation will be equal to 0)

        AxisMin = Math.Max(offsetTicks - TimeSpan.FromSeconds(5).Ticks, 0);

        AxisMax = AxisMin  + TimeSpan.FromSeconds(6).Ticks; // Set max according to min

    }


查看完整回答
反对 回复 2022-12-31
  • 1 回答
  • 0 关注
  • 58 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信