毕业设计中,用到串口与无人机通信,所以就用到了SerialPort这个类,这个类在设置属性时,

用到最主要的属性应该是COM口和波特率,由于本人不熟悉硬件,不便多说,但经验告诉我是这样的,

还有数据位,停止位,奇偶检验位等,和我合作的同学告诉我,只要给飞控版发指令那么自动会返回

数据,但一开始总是触发不了返回数据事件注册的函数,网上查资料说要设置

port.ReceivedBytesThreshold = 1;这个数据,大概意思是缓存区里有一个字节就去触发指定的

函数,还是不行。后来调换各种数据格式,最后换成byte数组,以最原始的格式定义

byte[] buffer = { 0x12, 0x34, 0x56, 0x78, 0x90, 0xAB, 0xCD, 0xEF };

发送就行了。

资料表明,SerialPort会自动开启一个线程去执行数据回传注册的函数的,

这里由于可能操作到主线程下的控件,所以这里介绍一一下Invoke,

1.Invoke大概意思就是找到定义所属控件的线程去执行相关操作,C#里是

不允许跨线程调用的,(在拥有此控件的基础句柄的线程上执行指定的委托)

当然如果不想麻烦也可以写这样一句话

Control.CheckForIllegalCrossThreadCalls = false;

不检查跨线程的逻辑错误。

2.BeginInvoke:(在创建控件的基础句柄所在线程上异步执行指定的委托)

Invoke的异步版本 (Invoke是同步完成的)。

3.RequireInvoke 可用通过RequireInvoke属性来检测是否需要使用Invoke或则是BeginInvoke去执行相关的操作:

(获取一个值,该值指示调用方在对控件进行方法调用时是否必须调用Invoke方法,因为调用方位于创建控件所在的线程以外)

4.EndInvoke 如果异步执行的委托(BeginInvoke)有返回值,可以通过EndInvoke去获取:(检索由传递的IAsyncResult表示的异步操作返回值)

因为是异步的,所以是另外一个线程去执行,主线程就不可能去等待执行的结果。等待有返回值时会自动得到。

5.代码解析

Serialport port=new SerialPort();//创建Serialport实例
List<string> comList = new List<string>();
for (int i = ; i < ; i++) //查找可用的COM放入combox中
{
port.PortName = "COM" + i;
try
{
port.Open();
comList.Add("COM" + i);
port.Close();
}
catch (Exception)
{ }
} portCbx.DataSource = comList;//以数据源的方式给combox赋值,会把索引为0的数据当作默认选中的值。
//直接用port.Items.Add()方法则不会默认选中值,需要设置SelectedIndex才能达到相同的想过
port.DataReceived += new SerialDataReceivedEventHandler(this.receiveData);//注册接收数据的方法 port.ErrorReceived += Port_ErrorReceived;//注册错误事件的处理方法 int r=port.Read(buffer,0,buffer.Length);//读取接收到的数据,返回的值是接收到数据的个数, buffer.Take(r).ToArray();//拿到真实接收到的数据,

毕设(二)C#SerialPort的更多相关文章

  1. 毕设二:python 爬取京东的商品评论

    # -*- coding: utf-8 -*- # @author: Tele # @Time : 2019/04/14 下午 3:48 # 多线程版 import time import reque ...

  2. 毕业设计(2):基于MicroPython的家庭可燃气体泄露微信报警器

    在我们平时的生活中,经常看到因气体泄漏发生爆炸事故的新闻.房屋起火.人体中毒等此类的新闻报道层出不穷.这种情况下,人民就发明了可燃气体报警器.当工业环境.日常生活环境(如使用天然气的厨房)中可燃性气体 ...

  3. 弄懂CNN,然后提升准确率4.21-4.27

    英语: 1.每天背单词,75起步.(这周没怎么背,考虑调整了) 2.并背王江涛图画作文一:传统文化(这周没背,但肯定要做) 学校: 0.吴恩达ML 1.毕设一:可视化,肺癌基因突变,深度学习(那么作图 ...

  4. [转]毕设- 深入HBase架构解析(二)

    深入HBase架构解析(二) 前言 这是<深入HBase架构解析(一)>的续,不多废话,继续.... HBase读的实现 通过前文的描述,我们知道在HBase写时,相同Cell(RowKe ...

  5. 【知识必备】RxJava+Retrofit二次封装最佳结合体验,打造懒人封装框架~

    一.写在前面 相信各位看官对retrofit和rxjava已经耳熟能详了,最近一直在学习retrofit+rxjava的各种封装姿势,也结合自己的理解,一步一步的做起来. 骚年,如果你还没有掌握ret ...

  6. 【开源毕设】一款精美的家校互动APP分享——爱吖校推 [你关注的,我们才推](持续开源更新3)附高效动态压缩Bitmap

    一.写在前面 爱吖校推如同它的名字一样,是一款校园类信息推送交流平台,这么多的家校互动类软件,你选择了我,这是我的幸运.从第一次在博客园上写博客到现在,我一次一次地提高博文的质量和代码的可读性,都是为 ...

  7. C#SerialPort如何读取串口数据并显示在TextBox上

    SerialPort中串口数据的读取与写入有较大的不同.由于串口不知道数据何时到达,因此有两种方法可以实现串口数据的读取.一.线程实时读串口:二.事件触发方式实现. 由于线程实时读串口的效率不是十分高 ...

  8. 对比SerialCommunication和微软的SerialPort,向SerialPort看齐

    SerialCommunication是我综合网上看到的代码稍作修改而成的串口通信类,而SerialPort则是C#的System类库的IO目录Ports子目录下的串口通信类.SerialCommun ...

  9. c#实现串口操作 SerialPort

    命名空间:using System.IO.Ports;该类提供了同步 I/O 和事件驱动的 I/O.对管脚和中断状态的访问以及对串行驱动程序属性的访问. 操作类声明: SerialPort sp = ...

随机推荐

  1. win32命令行小程序获取指定文件夹或者目录下面的所有文件大小,文件数量,目录数量

    #include <Windows.h> #include <stdio.h> #include <tchar.h> LARGE_INTEGER       lgA ...

  2. 在JS中var、let和const的区别

    var有变量提升 x = 4; // 变量 x 设置为 4 console.log(x)  //输出 4 var x; // 声明 x 上面代码相当于下面的 var x; // 声明 xx = 4;  ...

  3. Android Studio如何删除module

    当你想在Android Studio中删除某个module时,大家习惯性的做法都是选中要删除的module,右键去找delete.但是 在Android Studio中你选中module,右键会发现没 ...

  4. 利用WPF建立自己的3d gis软件(非axhost方式)(九)SDK自带部分面板的调用

    原文:利用WPF建立自己的3d gis软件(非axhost方式)(九)SDK自带部分面板的调用 先下载SDK:https://pan.baidu.com/s/1M9kBS6ouUwLfrt0zV0bP ...

  5. Python 图像处理: 生成二维高斯分布蒙版

    在图像处理以及图像特效中,经常会用到一种成高斯分布的蒙版,蒙版可以用来做图像融合,将不同内容的两张图像结合蒙版,可以营造不同的艺术效果. I=M∗F+(1−M)∗B 这里I 表示合成后的图像,F 表示 ...

  6. FontAwesome 图标

    FontAwesome 图标 前言 FontAwesome 大家都不陌生,精美的图标,出现在各式各样的网页中.最近在做 Windows Forms 应用程序,要求美观,就想能不能把 FontAweso ...

  7. Matlab Tricks(十五) —— 圆的正确画法

    使用参数方程, phi = 0:0.01:2*pi; x = cos(phi); y = sin(phi); axis equal plot(x, y) 根据参数方程,显然,圆心在 (0, 0),半径 ...

  8. OpenCV调试利器——Image Watch插件的安装和使用

    各大编译工具在调试的时候都可以实时查看变量的值,了解变量值的变动情况,在图像处理相关的程序调试中,是否也可以实时查看内存中图像变量的图形信息以及图像上指定区域或点位的数值变化情况呢? 在工业机器视觉领 ...

  9. Multi-processor having shared memory, private cache memories, and invalidate queues having valid bits and flush bits for serializing transactions

    Multi-processor systems are often implemented using a common system bus as the communication mechani ...

  10. Python 产生两个方法将不被所述多个随机数的特定范围内反复

    在最近的实验中进行.通过随机切割一定比例所需要的数据这两个部分.事实上这个问题的核心是生成随机数的问题将不再重复.递归方法,首先想到的,然后我们发现Python中竟然已经提供了此方法的函数,能够直接使 ...