随笔分类 -  C#

摘要:使用打印机扫描双面文档后,页码是交错且倒置的,因此想到使用C#获取PDF页面后重新排列,组成符合预期的PDF文件。基本思想就是分别获取2个PDF文档的页码,然后根据页码规则重新生成PDF文件。 经查询发现PdfPig库能够轻松实现PDF文件重新排列,该类库基于Apache-2.0 license,G 阅读全文
posted @ 2024-06-01 15:03 xhubobo 阅读(137) 评论(0) 推荐(0) 编辑
摘要:由于xml文件的易读特性,使得它非常适合作为程序配置文件。和ini文件相比,xml文件可以实现列表等复杂参数配置,灵活性比较大。 使用C#读取xml文件,首先要加载xml文件获取XmlDocument对象,然后通过该对象获取XmlNode类型的根节点,之后再对根节点获取相应子节点的属性或值。写入xm 阅读全文
posted @ 2024-03-12 15:43 xhubobo 阅读(2210) 评论(0) 推荐(0) 编辑
摘要:使用C#读写ini文件要用到Windows的API函数:GetPrivateProfileString、WritePrivateProfileString,下面对该方法进行封装并以具体ini文件为例说明如何读写。 1、ini文件示例 ; FTP服务器参数 [FtpServer] IP=127.0.0 阅读全文
posted @ 2024-03-09 16:57 xhubobo 阅读(569) 评论(0) 推荐(0) 编辑
摘要:最近在触屏Win10中需要调用osk.exe 显示虚拟键盘,其路径为:C:\Windows\System32\osk.exe。由于软件是32位的,在使用Process.Start方法时系统默认启用了文件系统重定向,将其指向路径:C:\Windows\SysWoW64\osk.exe,造成找不到文件。 阅读全文
posted @ 2024-03-05 16:43 xhubobo 阅读(458) 评论(0) 推荐(0) 编辑
摘要:将枚举型的数据类型绑定到单选按钮的IsChecked属性中,可以避免定义多个bool类型与之进行绑定,尤其是枚举类型较多时候,对bool对象的维护会更加复杂。 1、定义枚举类型及值转换器 internal enum Gender { [Description("男")] Male, [Descrip 阅读全文
posted @ 2023-08-21 10:34 xhubobo 阅读(708) 评论(0) 推荐(0) 编辑
摘要:ChatGPT作为基于AI的聊天工具,其用途涉及到很多方面,个人认为其最大的用途莫过于作为多种行业的知识库,并能够通过AI技术给出特定行业技术的参考实现,是一个功能强大的知识库、搜索引擎。鉴于此,我基于.Net技术栈制作了ChatGPT搜索助手,其架构如下所示: ChatGPT搜索助手包含3部分内容 阅读全文
posted @ 2023-04-06 15:54 xhubobo 阅读(374) 评论(7) 推荐(1) 编辑
摘要:本文展示了如何使用MathNet.Numerics对离散点进行曲线拟合,计算其R^2值,并基于Winform使用SkiaSharp.Views.WindowsForms绘制曲线及离散点,上述组件可从NuGet获取。 1、曲线拟合 使用Fit.Polynomial方法获取拟合后的多项式系数数组,其参数 阅读全文
posted @ 2023-03-07 14:53 xhubobo 阅读(3391) 评论(12) 推荐(1) 编辑
摘要:FFmpeg通过控制台命令可以方便地录制USB摄像头和屏幕,本文使用C#中的Process类调用FFmpeg命令,并通过获取控制台输出参数实现录制视频的完整功能。 Gitee完整代码:FFmpegWrappedSharpRecorder。 1、获取设备列表 FFmpeg命令: ffmpeg.exe 阅读全文
posted @ 2023-02-07 14:35 xhubobo 阅读(1676) 评论(0) 推荐(0) 编辑
摘要:C#使用Enum.GetValues<TEnum>()方法获取枚举数组集合TEnum[],基于此可使用枚举的所有类型作为下拉框等控件的数据源使用。 1、枚举定义 internal enum IconResolution { [Description("16*16")] Width16 = 0, [D 阅读全文
posted @ 2023-01-18 13:55 xhubobo 阅读(147) 评论(0) 推荐(0) 编辑
摘要:Winform将控件保存为图片比较简单,因为Control类本身就有DrawToBitmap方法,可以将控件本身输出到图片中。 此外,还可以通过Graphics类的CopyFromScreen方法将屏幕的指定区域拷贝到指定位图中,只是这种方式对窗口类比较适用,而且会保留窗口的阴影部分,因此对于截取控 阅读全文
posted @ 2022-12-03 12:28 xhubobo 阅读(614) 评论(0) 推荐(0) 编辑
摘要:在WPF中实现区域拖动的思路主要是,对鼠标按下、弹起、移动事件进行处理:鼠标按下时标记为可以移动并记录初始位置信息,鼠标弹起时标记不可以移动,鼠标移动过程中如果界面元素可以移动就动态设置相关位置。具体而言,需要处理的事件为:PreviewMouseLeftButtonDown、PreviewMous 阅读全文
posted @ 2022-11-04 15:26 xhubobo 阅读(663) 评论(0) 推荐(0) 编辑
摘要:1、生成指定范围内的整数序列 var values = Enumerable.Range(0, 100).Select(m => m * m); 2、时间类型格式化 var text = $"{DateTime.Now:yyyy-MM-dd HH:mm:ss.fff}"; 3、字节数组格式化 var 阅读全文
posted @ 2022-09-09 11:35 xhubobo 阅读(37) 评论(0) 推荐(0) 编辑
摘要:最近在做动态刷新COM串口列表的小功能,发现在UI线程异步处理ComboBox数据源后,UI无法即时刷新的问题。调试代码发现数据源是改变了的,但是无意中使用另外一种方式却能够有很好的效果,原因暂时未知。 问题解决方法:使用SelectedIndex代替SelectedValue,参考《I cant 阅读全文
posted @ 2022-07-11 21:32 xhubobo 阅读(1463) 评论(0) 推荐(0) 编辑
摘要:本文开发环境为:VS2019 + .Net5 Console App。 使用C#获取树莓派GPIO数据需要安装System.Device.Gpio包,在NuGet中搜索即可找到;DTH11温湿度传感器通过GPIO接口连接在树莓派相关引脚,其数据协议可在购买传感器时获取。在.Net5中获取DTH11温 阅读全文
posted @ 2022-07-07 21:05 xhubobo 阅读(804) 评论(0) 推荐(0) 编辑
摘要:1、引用NLog组件 通过NuGet安装NLog、NLog.Web.AspNetCore包。 2、NLog配置 在项目中添加NLog.config文件,将其“生成操作”属性设置为“内容”,“复制到输出目录”属性设置为“如果较新则复制”,配置信息参见注释: <?xml version="1.0" en 阅读全文
posted @ 2022-05-20 17:16 xhubobo 阅读(511) 评论(0) 推荐(0) 编辑
摘要:.NET中,控制台程序、Winform、WPF使用NLog的方式相同,本文通过.NET5控制台程序说明如何使用NLog组件。 1、引用NLog组件 下面2种方法都可以引用NLog组件: (1) 通过NuGet安装NLog包。 (2) 直接引用相应版本的NLog.dll。 2、NLog配置 在项目中添 阅读全文
posted @ 2022-05-20 16:31 xhubobo 阅读(1083) 评论(0) 推荐(0) 编辑
摘要:使用SuperSocket做WebSocket服务器开发需要引用包SuperSocket.WebSocket.Server,本文简称SuperWebScoket。 本文环境为.Net5 + ASP.Net Core Web API + SuperSocket.WebSocket.Server 2.0 阅读全文
posted @ 2022-04-13 16:53 xhubobo 阅读(2341) 评论(0) 推荐(0) 编辑
摘要:WPF中通过System.Windows.Forms.Application.Restart方法可以实现软件重启,处理好重启条件就能实现预期的重启效果。 重启条件可以存储在Properties.Settings中,也可以存在于xml等配置文件中,甚至可以存在于SQLite等数据库中,在需要重启的时候 阅读全文
posted @ 2022-01-12 09:46 xhubobo 阅读(2887) 评论(0) 推荐(1) 编辑
摘要:本文环境为.Net5 + WPF + Prism + Unity + SuperSocket 2.0.0-beta.10,介绍了在WPF中如何对SuperSocket 2.0进行依赖注入的方法。 至于如何在WPF中集成SuperSocket 2.0,参考“在WPF中集成SuperSocket 2.0 阅读全文
posted @ 2021-09-26 11:59 xhubobo 阅读(562) 评论(0) 推荐(0) 编辑
摘要:本文在.Net5环境下,在WPF项目中集成SuperSocket(V2.0.0-beta.10),以便使WPF程序拥有Socket服务器能力。 本文假设读者具有在.Net5控制台程序中使用SuperSocket 2.0的能力,因此服务器相关设置不再介绍。 1、创建托管服务器主机 参考在.Net5控制 阅读全文
posted @ 2021-09-26 11:42 xhubobo 阅读(1059) 评论(0) 推荐(0) 编辑