/// <summary> /// 添加串口日志数据 /// </summary> /// <param name="data">数据</param> /// <param name="send">true为发送,false为接收</param> private void addUartLog(object e, Tools.DataShowPara input) { uartDataFlowDocument.IsSelectionEnabled = false; byte[] data = input.data; bool send = input.send; Paragraph p = new Paragraph(new Run("")); Span text = new Span(new Run(DateTime.Now.ToString("[yyyy/MM/dd HH:mm:ss.ffff]"))); text.Foreground = Brushes.DarkSlateGray; p.Inlines.Add(text); if (send) { text = new Span(new Run(" ← ")); } else { text = new Span(new Run(" → ")); } text.Foreground = Brushes.Black; text.FontWeight = FontWeights.Bold; p.Inlines.Add(text); if (data.Length > 2000) { text = new Span(new Run(Tools.Global.Byte2String(data.Skip(0).Take(2000).ToArray()) + "\r\nData too long, check log folder for remaining data.")); } else { text = new Span(new Run(Tools.Global.Byte2String(data))); } if (send) { text.Foreground = Brushes.DarkRed; } else { text.Foreground = Brushes.DarkGreen; } text.FontSize = 15; p.Inlines.Add(text); if (!Tools.Global.setting.showHex) { p.Margin = new Thickness(0, 0, 0, 8); } uartDataFlowDocument.Document.Blocks.Add(p); if (Tools.Global.setting.showHex) { if (data.Length > 600) { p = new Paragraph(new Run("HEX:" + Tools.Global.Byte2Hex(data.Skip(0).Take(600).ToArray(), " ") + "\r\nData too long, check log folder for remaining data.")); } else { p = new Paragraph(new Run("HEX:" + Tools.Global.Byte2Hex(data, " "))); } if (send) { p.Foreground = Brushes.IndianRed; } else { p.Foreground = Brushes.ForestGreen; } p.Margin = new Thickness(0, 0, 0, 8); uartDataFlowDocument.Document.Blocks.Add(p); } //条目过多,自动清空 if (uartDataFlowDocument.Document.Blocks.Count > 500) { uartDataFlowDocument.Document.Blocks.Clear(); addUartLog(null, new Tools.DataShowPara { data = Encoding.Default.GetBytes("Data too big, please check your log folder for log data."), send = true }); } sv.ScrollToBottom(); uartDataFlowDocument.IsSelectionEnabled = true; }
int maxDataPack = 10000; //最大同时显示数据包数,因为太多会把工具卡死机 /// <summary> /// 添加串口日志数据 /// </summary> /// <param name="data">数据</param> /// <param name="send">true为发送,false为接收</param> private void addUartLog(object e, Tools.DataShowPara input) { uartDataFlowDocument.IsSelectionEnabled = false; byte[] data = input.data; bool send = input.send; if (!Tools.Global.setting.showSend && send) { return; } if (Tools.Global.setting.timeout >= 0) { Paragraph p = new Paragraph(new Run("")); Span text = new Span(new Run(DateTime.Now.ToString("[yyyy/MM/dd HH:mm:ss.ffff]"))); text.Foreground = Brushes.DarkSlateGray; p.Inlines.Add(text); if (send) { text = new Span(new Run(" ← ")); } else { text = new Span(new Run(" → ")); } text.Foreground = Brushes.Black; text.FontWeight = FontWeights.Bold; p.Inlines.Add(text); if (data.Length > maxDataLength) { text = new Span(new Run(Tools.Global.Byte2String(data.Skip(0).Take(maxDataLength).ToArray()) + "\r\nData too long, check log folder for remaining data.")); } else { text = new Span(new Run(Tools.Global.Byte2String(data))); } if (send) { text.Foreground = Brushes.DarkRed; } else { text.Foreground = Brushes.DarkGreen; } text.FontSize = 15; p.Inlines.Add(text); if (!Tools.Global.setting.showHex) { p.Margin = new Thickness(0, 0, 0, 8); } uartDataFlowDocument.Document.Blocks.Add(p); if (Tools.Global.setting.showHex) { if (data.Length > maxDataLength) { p = new Paragraph(new Run("HEX:" + Tools.Global.Byte2Hex(data.Skip(0).Take(maxDataLength).ToArray(), " ") + "\r\nData too long, check log folder for remaining data.")); } else { p = new Paragraph(new Run("HEX:" + Tools.Global.Byte2Hex(data, " "))); } if (send) { p.Foreground = Brushes.IndianRed; } else { p.Foreground = Brushes.ForestGreen; } p.Margin = new Thickness(0, 0, 0, 8); uartDataFlowDocument.Document.Blocks.Add(p); } //条目过多,自动清空 if (uartDataFlowDocument.Document.Blocks.Count > maxDataPack) { uartDataFlowDocument.Document.Blocks.Clear(); addUartLog(null, new Tools.DataShowPara { data = Encoding.Default.GetBytes("Too much packs, please check your log folder for log data."), send = true }); } } else//不分包 { if (uartDataFlowDocument.Document.Blocks.LastBlock == null || uartDataFlowDocument.Document.Blocks.LastBlock.GetType() != typeof(Paragraph)) { uartDataFlowDocument.Document.Blocks.Add(new Paragraph(new Run(""))); } //待显示的数据 string s; if (Tools.Global.setting.showHex) { s = Tools.Global.Byte2Hex(data, " "); } else { s = Tools.Global.Byte2String(data); } Span text = new Span(new Run(s)); text.FontSize = 15; if (send) { text.Foreground = Brushes.DarkRed; } else { text.Foreground = Brushes.DarkGreen; } (uartDataFlowDocument.Document.Blocks.LastBlock as Paragraph).Inlines.Add(text); } if (!LockLog)//如果允许拉到最下面 { sv.ScrollToBottom(); } uartDataFlowDocument.IsSelectionEnabled = true; }