void DataClient_GetTrendsCompleted(object sender, DataServiceReference.GetTrendsCompletedEventArgs e) { if (e.Error == null) { DateTime t00 = DateTime.Now; chrBase.DataSource = null; Trends.Clear(); foreach (ItemSqlTrend record in e.Result.Records) { ItemSqlTrend item = new ItemSqlTrend(); item.DataValue = GetCorrectDataValue(record.DataValue); item.SqlTime = record.SqlTime; Trends.Add(item); } TrendInited = true; chrBase.DataSource = Trends; TimeSpan diff1 = DateTime.Now - T0; TimeSpan diff2 = DateTime.Now - t00; lblStatus.Text = string.Format("Получено {0} значений за {1} мс (отрисовка за {2} мс)", e.Result.Records.Count, diff1.TotalMilliseconds.ToString("0"), diff2.TotalMilliseconds.ToString("0")); } else { lblStatus.Text = "Ошибка запроса"; } ckUpdate.Visibility = System.Windows.Visibility.Collapsed; }
ItemSqlTrends GenerateDemoTrens() { ItemSqlTrends result = new ItemSqlTrends(); result.Records = new ObservableCollection <ItemSqlTrend>(); Random random = new Random(); TimeSpan tsHour = new TimeSpan(1, 0, 0); DateTime starTime = DateTime.Now - tsHour; double minValue = 0; double maxValue = 0; for (int i = 0; i < 360; i++) { ItemSqlTrend trend = new ItemSqlTrend(); trend.SqlTime = starTime + new TimeSpan(0, 0, 10 * i); switch (Item.DataType) { case ItemReal.DataTypeSimple.Boolean: trend.DataValue = random.Next(0, 2); break; case ItemReal.DataTypeSimple.Integer: trend.DataValue = random.Next(0, 50); break; case ItemReal.DataTypeSimple.Real: trend.DataValue = random.Next(0, 50) + random.NextDouble(); break; } if (trend.DataValue < minValue) { minValue = trend.DataValue; } if (trend.DataValue > maxValue) { maxValue = trend.DataValue; } result.Records.Add(trend); } result.MinValue = minValue; result.MaxValue = maxValue; return(result); }
/// <summary> /// Запрос обновления из вне. /// </summary> public void UpdateExternal() { short timePeriodCurrent = GetTimePeriod(); if (Visible && OnlineUpdate && TrendInited) { if (SqlTimeLast != Item.SqlTime) { if (timePeriodCurrent >= cbeTimePeriod.SelectedIndex) { DateTime t00 = DateTime.Now; chrBase.DataSource = null; // Добавление актуального значения. ItemSqlTrend item = new ItemSqlTrend() { DataValue = GetCorrectDataValue(Item.DataValue), SqlTime = Item.SqlTime, }; Trends.Add(item); // Очистка от неактуальных значений. for (int i = 0; i < Trends.Count; i++) { if (Trends[i].SqlTime <Global.Default.SqlCurrentTime - TimeDistance || Trends[i].SqlTime> Global.Default.SqlCurrentTime) { Trends.RemoveAt(i); } } chrBase.DataSource = Trends; TimeSpan diff2 = DateTime.Now - t00; lblStatus.Text = string.Format("Сейчас {0} значений (отрисовка за {1} мс)", Trends.Count, diff2.TotalMilliseconds.ToString("0")); deBegin.EditValue = Global.Default.SqlCurrentTime - TimeDistance; deEnd.EditValue = Global.Default.SqlCurrentTime; } SqlTimeLast = Item.SqlTime; } } }