故事初衷:因为要发送几次数据做比较,所以不得已想办法改变每次画的线的颜色,然后利用赋一个RAGB颜色值的随机数来定义线条的颜色,具体代码见下:
private void ReceivedDataHandler(object obj)
{
// 接收缓存
List<byte> recvBuffer = new List<byte>();
recvBuffer.AddRange((List<byte>)obj);
if (recvBuffer.Count == 0)
{
return;
}
// 生成几个随机数
Random RandomNum_First = new Random(Guid.NewGuid().GetHashCode());
System.Threading.Thread.Sleep(RandomNum_First.Next(50));
Random RandomNum_Sencond = new Random(Guid.NewGuid().GetHashCode());
// 为了在白色背景上显示,尽量生成深色,进行三色的赋值
int int_Red = RandomNum_First.Next(256);
int int_Green = RandomNum_Sencond.Next(256);
int int_Blue = (int_Red + int_Green > 400) ? 0 : 400 - int_Red - int_Green;
int_Blue = (int_Blue > 255) ? 255 : int_Blue;
System.Drawing.Color color = System.Drawing.Color.FromArgb(int_Red, int_Green, int_Blue);
//颜色数据格式的转换
System.Windows.Media.Color color1 = System.Windows.Media.Color.FromArgb(color.A, color.R, color.G, color.B);
// 必须应当保证全局缓冲区的数据能够被完整地备份出来,这样才能进行进一步的处理。
shouldClear = true;
string RecvData = Utilities.BytesToText(recvBuffer, receiveMode, serialPort.Encoding);
string[] RecData = RecvData.Split(' ');
this.Dispatcher.Invoke(new Action(() =>
{
if (showReceiveData)
{
int N =RecData.Length;
double[] x = new double[N];
double[] y = new double[N];
for (int i = 0; i < N; i++)
{
x[i] =i;
y[i] = Convert.ToDouble(RecData[i]);
}
// 创建数据源
var xDataSource = x.AsXDataSource();
var yDataSource = y.AsYDataSource();
CompositeDataSource compositeDataSource = xDataSource.Join(yDataSource);
//添加图像到plotter
plotter.AddLineGraph(compositeDataSource, color1, 1);
// 使可见
plotter.FitToView();
}
dataRecvStatusBarItem.Visibility = Visibility.Collapsed;
}));