void comm_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
int n = comm.BytesToRead;//先记录下来,避免某种原因,人为的原因,操作几次之间时间长,缓存不一致
byte[] buf = new byte[n];//声明一个临时数组存储当前来的串口数据
received_count += n;//增加接收计数
comm.Read(buf, 0, n);//读取缓冲数据
builder.Clear();//清除字符串构造器的内容
//因为要访问ui资源,所以需要使用invoke方式同步ui。
this.Invoke((EventHandler)(delegate
{
//判断是否是显示为16禁止
if (checkBoxHexView.Checked)
{
//依次的拼接出16进制字符串
foreach (byte b in buf)
{
builder.Append(b.ToString("X2") + " ");
}
}
else
{
//直接按ASCII规则转换成字符串
builder.Append(Encoding.ASCII.GetString(buf));
}
//追加的形式添加到文本框末端,并滚动到最后。
this.txGet.AppendText(builder.ToString());
//修改接收计数
labelGetCount.Text = "Get:" + received_count.ToString();
}));
这个是C#的串口操作代码~但是转到WPF就不能用了~改来改去该不对~WPF中的INVOKE该如何使用啊?
{
int n = comm.BytesToRead;//先记录下来,避免某种原因,人为的原因,操作几次之间时间长,缓存不一致
byte[] buf = new byte[n];//声明一个临时数组存储当前来的串口数据
received_count += n;//增加接收计数
comm.Read(buf, 0, n);//读取缓冲数据
builder.Clear();//清除字符串构造器的内容
//因为要访问ui资源,所以需要使用invoke方式同步ui。
this.Invoke((EventHandler)(delegate
{
//判断是否是显示为16禁止
if (checkBoxHexView.Checked)
{
//依次的拼接出16进制字符串
foreach (byte b in buf)
{
builder.Append(b.ToString("X2") + " ");
}
}
else
{
//直接按ASCII规则转换成字符串
builder.Append(Encoding.ASCII.GetString(buf));
}
//追加的形式添加到文本框末端,并滚动到最后。
this.txGet.AppendText(builder.ToString());
//修改接收计数
labelGetCount.Text = "Get:" + received_count.ToString();
}));
这个是C#的串口操作代码~但是转到WPF就不能用了~改来改去该不对~WPF中的INVOKE该如何使用啊?
解决方案 »
- girdcontrol和treelist数据批量保存及格式转换
- 关于serialport串口通信的大问题
- “System.Data.DataSet”不包含“table”的定义
- VS2005如何在程序中用代码动态添加引用和WEB 引用?
- 异步多线程与进度条
- 数据加载量大,显示临时窗体问题,在线等...
- 绝对有深度的问题.关于System.Runtime.InteropServices.UCOMIStream的使用.
- 求一段正则表示式程序,,,,提取字符串中内容。
- C#中判断text的值不是浮点数这个if怎么写?
- 初级问:怎样删除datagrid中的一行?
- c#与PL/SQL输入参数传递
- c#开发播放器,想播放多种格式
我有试过,貌似还是不行的,WPF和C#后台INVOKE使用好像不一样
lihanbing
(lihanbing)
等 级:
#1楼 得分:0回复于:2012-03-07 12:19:08
this.Dispatcher.Invoke()这方法我试了可以的