毕业设计中,用到串口与无人机通信,所以就用到了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. NOIP模拟 wall - 最大生成树

    题目大意: 给出n个点,第i个点坐标是(\(x_i, y_i\)),给出m条边,第i条边的权值是\(w_i\),求将图变成一颗树所需要删除边的最小权值和. 题目分析: 首先要看出坐标其实是出题人使出的 ...

  2. jQuery实现复选框的全选、反选、并且根据复选框的<checked属性>控制多个对应div的显示/隐藏

    <!doctype html><html> <head> <meta charset="utf-8"> <title>j ...

  3. hello.c内核模块编译 -- linux内核

    Linux开发模块,在本机上看调试信息的方法走通了.当前版本号2.6.32-32-generic uname –r 能够查询 这里取module_param()作为样例. 该宏被定义在include/ ...

  4. Linux下用GCC

    Linux下用GCC 前言 离职前对做过的支付系统进行了一番#总结,继续完善我的C服务器. 本想着接下来大概实现一下 CGI 协议,但是实现过程中被一个问题卡住了: C进程与php进程的交互数据类型问 ...

  5. View的绘制顺序

    1.写在 super.onDraw() 的下面 把绘制代码写在 super.onDraw() 的下面,由于绘制代码会在原有内容绘制结束之后才执行,所以绘制内容就会盖住控件原来的内容. 2.写在 sup ...

  6. 【27.40%】【codeforces 599D】Spongebob and Squares

    time limit per test2 seconds memory limit per test256 megabytes inputstandard input outputstandard o ...

  7. Android菜鸟的成长笔记(18)——绑定本地Service并与之通信

    在上一篇中介绍了Service与Activity的区别及Service两种启动方式中的第一种启动方式startService(). 我们会发现用startService().stopService() ...

  8. 详解Qt,并举例说明动态编译(shared)和静态编译(static)以及debug and release 编译版本区别(可产生静态版的Debug版本,需要把-release 改为 –debug-and-release)

    作为初入Qt学习的新人,花了整整一两天时间,对Qt编译版本等问题进行了一步步探索,首先感谢网站博客中文章,开始也不是很明白一些几个问题: 1.Qt版本问题 作为初学者,可能下载时这么多版本,如何选择呢 ...

  9. C# 静态构造函数,静态变量执行顺序(精华版)(规正版)

    一.成员初始化整体顺序 1.成员赋值初始化先于构造函数: 2.成员赋值初始先从子类再到基类: 3.构造函数初始化先从基类再到子类: 4.静态成员初始化优先于实例成员初始化: 二.对类型静态成员构造的大 ...

  10. 简单使用.net core 自带的DI

    1.创建一个web api项目 2.在项目中创建一个接口类 namespace LearnCore.CoreDI { public interface ILearnDI { string GetNam ...