<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[程序猿的专栏]]></title><description><![CDATA[C#开发者经验记录]]></description><link>https://blog.youkuaiyun.com/evint888</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; evint888]]></copyright><item><title><![CDATA[C# 解决动态调用WebService内存泄露的问题]]></title><link>https://blog.youkuaiyun.com/evint888/article/details/123842516</link><guid>https://blog.youkuaiyun.com/evint888/article/details/123842516</guid><author>evint888</author><pubDate>Wed, 30 Mar 2022 11:54:52 +0800</pubDate><description><![CDATA[目录



一、问题原因

二、问题处理

一、问题原因

最近项目中用到了动态调用WebService的代码，网上给出的代码WebServiceHelper的代码，如下，此代码存在内存泄露，执行一次，程序会涨大概0.2MB的内存，最后导致程序出现OutOfMemory的错误，为什么会出现内存泄露呢？原因在于CompilerResults类动态编译一次就会增加内存，只有程序退出时才能释放，因此，只要减少动态编译的次数即可解决内存一直增长的问题。


#region InvokeWebService
    ]]></description><category></category></item><item><title><![CDATA[C# 异步操作Task类使用(二)]]></title><link>https://blog.youkuaiyun.com/evint888/article/details/122815202</link><guid>https://blog.youkuaiyun.com/evint888/article/details/122815202</guid><author>evint888</author><pubDate>Mon, 07 Feb 2022 21:57:28 +0800</pubDate><description><![CDATA[一、多线程同步

何为线程同步，其实就是数据串行操作，当前当前的资源在没有操作完毕之前，不允许其他的线程对同一资源进行操作。即当有一个线程在对内存进行操作时，其他线程都不可以对这个内存地址进行操作，直到该线程完成操作， 其他线程才能对该内存地址进行操作，而其他线程又处于等待状态，实现线程同步的方法有很多，互斥量就是其中一种。

在C#中使用互斥量 Mutex即可进行线程同步。


using System; using System.Threading;
class MutexSample

{    

]]></description><category></category></item><item><title><![CDATA[C# 异步操作Task类使用(一)]]></title><link>https://blog.youkuaiyun.com/evint888/article/details/122724749</link><guid>https://blog.youkuaiyun.com/evint888/article/details/122724749</guid><author>evint888</author><pubDate>Thu, 27 Jan 2022 23:16:39 +0800</pubDate><description><![CDATA[目录

一、Task类介绍

1、Task创建

2、Task异步方法运行

3、Task异步方法释放

二、Task更新UI线程

1、在更新UI线程的控件时需要使用异步委托进行操做

2、关闭线程错误异常提示

在C/S编程中Task和Thread是异步操作必不可少的类，作用：为了提高用户操作程序的体验，防止UI线程的卡顿，其实多线程就相当于2个人同时干活。

例如：我们在访问局域网内WebService服务时，如果网络通讯不通或不顺畅时，在不使用线程或异步方法更新就会造成主线程卡顿，在网络操作超时之.]]></description><category></category></item><item><title><![CDATA[C# 使用串口分析SAM协议，读取身份证信息]]></title><link>https://blog.youkuaiyun.com/evint888/article/details/122463176</link><guid>https://blog.youkuaiyun.com/evint888/article/details/122463176</guid><author>evint888</author><pubDate>Mon, 24 Jan 2022 20:07:27 +0800</pubDate><description><![CDATA[最近做了个项目，使用Linux Arm主板终端机器，这个终端的一项功能是使用身份证读卡器读取人员的身份证号，初次解除Linux系统，经过
]]></description><category></category></item><item><title><![CDATA[C# 调用USB摄像头]]></title><link>https://blog.youkuaiyun.com/evint888/article/details/122504038</link><guid>https://blog.youkuaiyun.com/evint888/article/details/122504038</guid><author>evint888</author><pubDate>Sat, 15 Jan 2022 23:13:27 +0800</pubDate><description><![CDATA[C#调用USB摄像头使用AForge类库进行开发

1、AForge安装


]]></description><category></category></item><item><title><![CDATA[C# 在Windows系统下使用蓝牙进行数据通讯]]></title><link>https://blog.youkuaiyun.com/evint888/article/details/122429511</link><guid>https://blog.youkuaiyun.com/evint888/article/details/122429511</guid><author>evint888</author><pubDate>Tue, 11 Jan 2022 13:07:19 +0800</pubDate><description><![CDATA[1、蓝牙介绍



蓝牙技术是一种无线数据和语音通信开放的全球规范，它是基于低成本的近距离无线连接，为固定和移动设备建立通信环境的一种特殊的近距离无线技术连接。

蓝牙作为一种小范围无线连接技术，能在设备间实现方便快捷、灵活安全、低成本、低功耗的数据通信和语音通信，因此它是实现无线个域网
通信的主流技术之一。与其他网络相连接可以带来更广泛的应用。是一种尖端的开放式无线通信，能够让各种数码设备无线沟通，是无线网络传输技术的一种，原本用来取代红外
线通信。

2、蓝牙在项目中应用



最近一个项目中要求采集设]]></description><category></category></item><item><title><![CDATA[C# 使用DirectX.DirectSound播放语音]]></title><link>https://blog.youkuaiyun.com/evint888/article/details/122387024</link><guid>https://blog.youkuaiyun.com/evint888/article/details/122387024</guid><author>evint888</author><pubDate>Sat, 08 Jan 2022 22:10:00 +0800</pubDate><description><![CDATA[最近在做项目时，需要进行音频文件的即时播放，并且要求同时播放多条语音，之前C#程序中语音播放一直使用System.Media类库的SoundPlayer类进行播放，但是这个播放类有个弊端，就是在播放时不能同时播放2条语音，经过查找资料DirectX.DirectSound可同时播放2条语音。

DirectX.DirectSound的特点

1、可同时播放多条语音

2、可分左右声道进行播放

3、可随时释放正在播放的语音

此组件处理流程：

1、创建播放线程


        public void ]]></description><category></category></item><item><title><![CDATA[C# 提示：无法加载 DLL“XXX.dll”: 找不到指定的模块。 (异常来自 HRESULT:0x8007007E)。]]></title><link>https://blog.youkuaiyun.com/evint888/article/details/122367366</link><guid>https://blog.youkuaiyun.com/evint888/article/details/122367366</guid><author>evint888</author><pubDate>Fri, 07 Jan 2022 16:41:37 +0800</pubDate><description><![CDATA[今天再调试程序时发现程序再笔记本上运行正常，然而拷贝到客户主机上之后出现了（System.DllNotFoundException: 无法加载 DLL“msc.dll”: 找不到指定的模块。 (异常来自 HRESULT:0x8007007E)。）的问题，经过再三调试，

1、确认CPU平台为x86，正常

2、dll的路径，正常

经过再三的排除，发现是msc.dll的一个依赖库缺少了。

通过以下的方法进行C++依赖库查看：

1、打开vs目录下的控制台命令行



2、输入在命令行中输入命令：dump.]]></description><category></category></item><item><title><![CDATA[C# SQLite库使用]]></title><link>https://blog.youkuaiyun.com/evint888/article/details/122331724</link><guid>https://blog.youkuaiyun.com/evint888/article/details/122331724</guid><author>evint888</author><pubDate>Wed, 05 Jan 2022 21:41:24 +0800</pubDate><description><![CDATA[SQLite，是一款轻型的数据库，是遵守的ACID关系型数据库管理系统，它包含在一个相对小的C库中。它的设计目标嵌入式是的，而且已经在很多中使用了它，它占用资源非常的低，在嵌入式设备中，可能只需要几百K的内存就够了。它能够支持Windows/Linux/Unix等等主流的操作系统，同时能够跟很多程序语言相结合，比如 Tcl、C#、PHP、Java等
...]]></description><category></category></item><item><title><![CDATA[C# FastReport.Net使用]]></title><link>https://blog.youkuaiyun.com/evint888/article/details/122282398</link><guid>https://blog.youkuaiyun.com/evint888/article/details/122282398</guid><author>evint888</author><pubDate>Mon, 03 Jan 2022 19:36:38 +0800</pubDate><description><![CDATA[对于管理类的程序在从数据库获取到数据集之后，可能就需要进行报告单的打印，C#中FastReport.Net类库封装了报告单的设计与打印，下面介绍FastReport.Net使用


]]></description><category></category></item><item><title><![CDATA[C# 正则表达式判断]]></title><link>https://blog.youkuaiyun.com/evint888/article/details/122282540</link><guid>https://blog.youkuaiyun.com/evint888/article/details/122282540</guid><author>evint888</author><pubDate>Sun, 02 Jan 2022 23:36:20 +0800</pubDate><description><![CDATA[在编写C#程序时，对格式和类型进行转换时就需要使用正则表达式判断，转换前的格式是否满足转换的的需要。

正则表达式用的最多的判断：

1、IsNumber是否数字,通过正则表达式来验证是否为数字


        public static bool IsNumber(string strNumber)
        {
            Regex objNotNumberPattern = new Regex("[^0-9.-]");
            Regex objTwoDotPa]]></description><category></category></item><item><title><![CDATA[C# Log4Net 日志库应用]]></title><link>https://blog.youkuaiyun.com/evint888/article/details/122271693</link><guid>https://blog.youkuaiyun.com/evint888/article/details/122271693</guid><author>evint888</author><pubDate>Sat, 01 Jan 2022 22:44:27 +0800</pubDate><description><![CDATA[开发一款应用程序，必不可少的就需要进行日志记录，在C#下使用Log4Net进行日志记录

Log4Net使用步骤：

1、NuGet程序包下载，首先右击工程，单击“管理NuGet程序包”，在收缩框输入“log4net”安装相应类库。













2、在工程的Assembly Info.cs 中增加 [assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net.config", Watch = true)] ，这行作用为了封装类库]]></description><category></category></item><item><title><![CDATA[C# 串口SerialPort控件]]></title><link>https://blog.youkuaiyun.com/evint888/article/details/122262815</link><guid>https://blog.youkuaiyun.com/evint888/article/details/122262815</guid><author>evint888</author><pubDate>Fri, 31 Dec 2021 22:57:50 +0800</pubDate><description><![CDATA[串口对于工控领域应用较为广泛
]]></description><category></category></item><item><title><![CDATA[C# MQTT 应用介绍]]></title><link>https://blog.youkuaiyun.com/evint888/article/details/122246635</link><guid>https://blog.youkuaiyun.com/evint888/article/details/122246635</guid><author>evint888</author><pubDate>Thu, 30 Dec 2021 23:07:01 +0800</pubDate><description><![CDATA[MQTT（Message Queuing Telemetry Transport，消息队列遥测传输协议）是一种基于发布/订阅（publish/subscribe）模式的"轻量级"通讯协议，由IBM在1999年发布。MQTT最大优点在于，可以以极少的代码和有限的带宽，为连接远程设备提供实时可靠的消息服务。 特点：

1、使用发布/订阅消息模式，提供一对多的消息发布，解除应用程序的耦合

2、对负载内容屏蔽的消息传输

3、使用TCP/IP提供网络连接

MQTT分为服务端和客户端，服务端Broker，所有设备]]></description><category></category></item><item><title><![CDATA[C# AppSettings使用]]></title><link>https://blog.youkuaiyun.com/evint888/article/details/122213421</link><guid>https://blog.youkuaiyun.com/evint888/article/details/122213421</guid><author>evint888</author><pubDate>Wed, 29 Dec 2021 13:11:17 +0800</pubDate><description><![CDATA[C# AppConfig 读写]]></description><category></category></item><item><title><![CDATA[C#+mono 在Linux Arm下访问CAN设备]]></title><link>https://blog.youkuaiyun.com/evint888/article/details/122202058</link><guid>https://blog.youkuaiyun.com/evint888/article/details/122202058</guid><author>evint888</author><pubDate>Tue, 28 Dec 2021 20:43:31 +0800</pubDate><description><![CDATA[mono可以使C#程序运行在Linux下，使用C#调用Linux下CAN设备也是可行的，C#可以跨平台调用so库

1、使用C封装CAN通讯并编译


#include &lt;stdio.h&gt;
#include &lt;stdlib.h&gt;
#include &lt;string.h&gt;
#include &lt;unistd.h&gt;
#include &lt;net/if.h&gt;
#include &lt;sys/ioctl.h&gt;
#include &lt;sys/socke]]></description><category></category></item><item><title><![CDATA[海康摄像头YUV420P格式图片缩放]]></title><link>https://blog.youkuaiyun.com/evint888/article/details/122160974</link><guid>https://blog.youkuaiyun.com/evint888/article/details/122160974</guid><author>evint888</author><pubDate>Sun, 26 Dec 2021 21:15:57 +0800</pubDate><description><![CDATA[上面文章说过了YUV格式拼接，拼接的数据就需要提前对图像进行缩放的功能

海康摄像头获取到了图像数据解码后，分辨率随着设想头的不同，会造成YUV格式图片分辨率不同，就需要对图片进行缩放，YUV的缩放就用到LibYuv.dll动态库，动态库下提供个Scale方法，此方法为C#的导入方法


        [DllImport(_path, SetLastError = true, CallingConvention = CallingConvention.Cdecl)]
        public sta]]></description><category></category></item><item><title><![CDATA[海康摄像头合码]]></title><link>https://blog.youkuaiyun.com/evint888/article/details/122150020</link><guid>https://blog.youkuaiyun.com/evint888/article/details/122150020</guid><author>evint888</author><pubDate>Sat, 25 Dec 2021 22:59:07 +0800</pubDate><description><![CDATA[海康摄像头的视频通过H.264解码后，转换为YUV420P格式后就可以对YUV数据进行拼接，YUV的格式分为YUV444，YUV422，YUV420，格式见下图，通过此图可以看出，YUV420的压缩比较高，经常使用YUV420格式进行图像处理。



YUV420的格式也分为以下4中，其中区别在于UV的排列方式不同



YUV420P进行拼接可分为横向拼接和纵向拼接





下面是测试过的C#包含了横向纵向拼接代码，通过源YUV图像，绘制到目的YUV图像的便宜位置的方法


        ///...]]></description><category></category></item><item><title><![CDATA[海康摄像头PS流分离]]></title><link>https://blog.youkuaiyun.com/evint888/article/details/122137274</link><guid>https://blog.youkuaiyun.com/evint888/article/details/122137274</guid><author>evint888</author><pubDate>Fri, 24 Dec 2021 23:00:52 +0800</pubDate><description><![CDATA[可以分离出音频和视频帧数据


        /// &lt;summary&gt;
        /// Determines whether [is i frame] [the specified buf].
        /// &lt;/summary&gt;
        /// &lt;param name="buf"&gt;The buf.&lt;/param&gt;
        /// &lt;returns&gt;&lt;c&gt;true&lt;/c&gt; if [is .]]></description><category></category></item><item><title><![CDATA[海康摄像头视频解码]]></title><link>https://blog.youkuaiyun.com/evint888/article/details/122117963</link><guid>https://blog.youkuaiyun.com/evint888/article/details/122117963</guid><author>evint888</author><pubDate>Thu, 23 Dec 2021 22:57:08 +0800</pubDate><description><![CDATA[海康视频解码YUV420p格式]]></description><category></category></item></channel></rss>