在单片机项目开发中,上位机也是一个很重要的部分,主要用于数据显示(波形、温度等)、用户控制(LED,继电器等),下位机(单片机)与 上位机之间要进行数据通信的两种方式都是基于串口的:USB转串口 —— 上位机和下位机通过USB转串口连接线直接相连进行数据交互; 串口转WIFI(ESP8266) —— 上位机和下位机基于TCP/IP协议通过WIFI传输数据; 串口转蓝牙(HC-06)—— 不多用,暂不介绍;上位机软软件开发主要包括以下两种:...
如果大家读过dapper源码,你会发现这内部有很多方法都用到了yield关键词,那yield到底是用来干嘛的,能不能拿掉,拿掉与不拿掉有多大的差别,首先上一段dapper中精简后的Query方法,先让大家眼见为实。private static IEnumerable<T> QueryImpl<T>(this IDbConnection cnn, CommandDefinition command, Type effectiveType){object param = command.Parameters;var identity = new Identity(command.CommandText, command.CommandT...
一、同步和异步。 先说同步。 同步概念大家都很熟悉。在异步概念出来之前,我们的代码都是按同步的方式写的。简单来说,就是程序严格按照代码的逻辑次序,一行一行执行。 看一段代码: public?static?void?Main(string[]?args){????Console.WriteLine("Syc?proccess?-?start");????Console.WriteLine("Syc?proccess?-?enter?Func1");????func1();????Console.WriteLine("Syc?proccess?-?out?Func1");????Console.WriteLine("Syc?pr...
这一次的博客更新,主要内容是自己之前很小伙伴一起写的一个仿QQ的程序。主要的知识就是 网络编程(仅支持局域网的通信 、简单的C/S架构 、数据库(怎么使用数据库,因为我不是这个数据库的设计者) 以及 桌面开发的基础知识 。 网络通信简介 Socket还被称作“套接字”,应用程序通常通过套接字向网络发送请求或者应答网络请求。根据连接启动的方式以及本地套接字要连接的目标,套接字之间的连接过程可以分为三个步骤:服务器监听,...
委托初识:.net中几种委托的方法(Delegate、Action、Func) Delegate至少0个参数,至多32个参数,可以无返回值,也可以指定返回值类型 Func可以接受0个至16个传入参数,必须具有返回值 Action可以接受0个至16个传入参数,无返回值 用法可参考https://www.cnblogs.com/dengshaojun/p/6227316.html --------------------------------------------------------------------------------------------------------- Invoke表...
1、Thread多线程编程举例关键字:前台线程,后台线程,线程优先级,线程休眠,线程阻塞。 1 class MultiThreadingApplication {2 static void Main(string[] args) {3 //Thread thread1 = new Thread(new ThreadStart(Test1));4 Thread thread1 = new Thread(Test1);//线程传入无参数委托实例5 //Thread thread2 = new Thread(new ParameterizedThreadStart(Test2));//正常传递6 ...
为了C#调用,把C语言函数封装成dll 这次大作业小组利用C语言写代码,最后使用winform设计GUI,自然要在C#中调用C,该篇记录如何把C封装为dll。 大作业模拟温度传感器,C语言代码为两部分,一部分为sensor服务端serve,可以生成随机温度来模拟温度传感器,另一部分为workstation客户端client,可以使用其发送指令start来唤醒sensor,或者read来获取当前温度,二者采用tcp/ip协议通信。最后要把客户端做成GUI界面。 拿到组员给的代码...
一、Asynchronous methods 异步方法C# 5.0 提供的async和await使异步编程更简单。 .NET 4.5 的推出,对于C#又有了新特性的增加——就是C#5.0中async和await两个关键字,这两个关键字简化了异步编程。使用async修饰的方法被称为异步方法,这个方法调用时应该在前面加上await。 异步方法命名应该以Async结尾,这样大家知道调用的时候使用awaitasync和await关键字只是编译器的功能。编译器最终会用Task类创建代码。 1、创建任务 建立...
从Microsoft .Net 2.0版本以后,就默认提供了System.IO.Ports.SerialPort类,用户可以非常简单地编写少量代码就完成串口的信息收发程序。本文将介绍如何在PC端用C# .Net 来开发串口应用程序。1. 串口硬件信号定义DB9 Connector 信号定义。串口测试将2、3针脚短接即可。2、 串口端口号搜索string[] portList = System.IO.Ports.SerialPort.GetPortNames(); for (int i = 0; i < portList.Length; i++) {string name = portList[i];c...
原文:c# - 在ASP.NET Core上检测与SSE的断开连接 - 编程笔记c# - 在ASP.NET Core上检测与SSE的断开连接 Detecting a disconnection from SSE on ASP.NET Core ? I want to detect a disconnection from SSE (Server Send Events) on ASP.NET Core. Old way Response.IsClientConnected not working. Do you have solution for this problem?? Answer ?I found temporary solution to my question. Temporary because IsCancellati...
1.如果只是启动一个新线程,不需要传入参数,不需要线程返回结果,可以直接使用ThreadStart(),Thread类接收一个ThreadStart委托或ParameterizedThreadStart委托的构造函数。ThreadStart委托中 作为参数的方法 不需要参数,并且没有返回值。ParameterizedThreadStart委托,可以在线程start的时候,传入参数,利用这个参数可以向线程传递参数(ParameterizedThreadStart是一个有参的、返回值为void的委托,参数类型必须是object)...
根据代码示例来学习,创建一个函数来模拟时间消耗的方法,此处为GetSomeThing函数。要使用异步编程,需要使用一个async修饰的方法来包装调用GetSomeThing函数,此函数的返回值为Task类型,该类型表示进行并行运算的任务引用。此处示例为ConsumeManyTime函数。现在就可以直接使用异步方式了,参考TestOne()函数中的代码,其实就是直接调用第二步中的函数ConsumeManyTime();总结:异步编程虽然示例三步,但是实际上就是两步的事情,第...
这里对上一文章做一个补充,因为很多时候,我们需要分步计算多个文件的crc值,而往往最后显示的值都需要在第一时间内进入眼帘。所以我们需要确保最后文件的计算结果必须显示到UI的最前端。 同样,我们依然使用格式:控件名称+ScrollToEnd()函数实现: 代码如下: 1 UserInput.ScrollToEnd(); 2 if(UserInput.IsFocused==true) 3 { 4 UserInput.SelectionStar...
C# Socket编程实现简单的局域网聊天器前言 最近在学习C# Socket相关的知识,学习之余,动手做了一个简单的局域网聊天器。有萌生做这个的想法,主要是由于之前家里两台电脑之间想要传输文件十分麻烦,需要借助QQ,微信或者其他第三方应用,基本都要登录,而且可能传输的文件还有大小限制,压缩问题。所以本聊天器的首要目标就是解决这两个问题,做到使用方便(双击启动即用),传文件无限制。废话不多说,先上图。S-Chat是服务端,C...
我的多线程WinForm程序老是抛出InvalidOperationException ,怎么解决? 在WinForm中使用多线程时,常常遇到一个问题,当在子线程(非UI线程)中修改一个控件的值:比如修改进度条进度,时会抛出如下错误 Cross-thread operation not valid: Control XXX accessed from a thread other than the thread it was created on. 在VS2005或者更高版本中,只要不是在控件的创建线程(一般就是指UI主线程)上访问控件的属性就会抛出这个错...