You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

96 lines
3.2 KiB
C#

using mseedChart.Main.Models;
using mseedChart.Main.Views;
using Prism.Commands;
using Prism.Mvvm;
using System;
using System.Collections.Concurrent;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
using System.Timers;
namespace mseedChart.Main.ViewModels
{
public class ViewAViewModel : BindableBase
{
public ViewAViewModel(ChartPlotViewModel chartPlotViewModel)
{
this._chartPlotViewModel = chartPlotViewModel;
Message = "View A from your Prism Module";
Timer time = new Timer(1000);
time.Elapsed += Time_Elapsed;
time.Start();
}
private string _message;
private ChartPlotViewModel _chartPlotViewModel;
private BlockingCollection<List<double[]>> queueDatas = new BlockingCollection<List<double[]>>(100);
public string Message
{
get { return _message; }
set { SetProperty(ref _message, value); }
}
public DelegateCommand<object> LoadedCommand => new(Loaded);
List<LineDatas> lines = new List<LineDatas>();
private void Loaded(object obj)
{
var chart = obj as ChartPlotView;
_chartPlotViewModel = chart.DataContext as ChartPlotViewModel;
DirectoryInfo root = new DirectoryInfo(AppDomain.CurrentDomain.BaseDirectory + "data");
FileInfo[] files = root.GetFiles();
List<string> SHE = new List<string>();
int step = 500;
for (int i = 0; i < 24; i++)
{
foreach (var file in files)
{
SHE = File.ReadAllLines(file.FullName).ToList();
//第一个非数据移除掉
SHE.RemoveAt(0);
var data = SHE.Select(x => Convert.ToDouble(x)+step*i);
lines.Add(new LineDatas
{
Lable = "line" + file.Name,
YData = data.ToArray(),
// XData = DateTime.Now.ToOADate()
});
}
}
_chartPlotViewModel.InializeChartPlotChange?.Invoke(lines);
Task.Run(() =>
{
while (true)
{
var data = lines.Select(x => x.YData).ToList();
for (int i = 0; i < 4; i++)
{
List<double[]> values = new List<double[]>();
foreach (var item in data)
{
var SH= item.Skip(i * 500).Take(500).ToArray();
values.Add(SH);
}
queueDatas.Add(values);
}
Debug.WriteLine("start:{0}",DateTime.Now);
System.Threading.Thread.Sleep(100);
}
});
}
private void Time_Elapsed(object sender, ElapsedEventArgs e)
{
_chartPlotViewModel.PlotLineDataChanged?.Invoke(queueDatas.Take());
}
}
}