- 博客(3116)
- 资源 (44)
- 收藏
- 关注

原创 鸿蒙OS应用开发的开发环境
当你想投入到这个生态系统里的时候,首先是使用它,这是最方便的方法,比如买一台带有鸿蒙系统的手机,并且不断地使用它,提出你自己的建议,让它进行完善和改进。在这里主要开始学习开发鸿蒙系统的应用,由于鸿蒙系统发布的时间不是很久,当然是相对安卓和IOS来说,因此它是一个全新的系统,并且致力于创建一种更方便的软件方式,它引入不同于以往的软件开发语言,以及不同的界面接口。这时候,就可以看到应用的名称,包的名称,保存的位置,编译的SDK版本,运行模式,是否可视化编辑,语言,兼容性API,设备类型。
2023-12-07 12:31:53
789
原创 System.Windows.Forms.ToolTip
摘要:System.Windows.Forms.ToolTip类是.NET Framework中用于创建工具提示的组件,当鼠标悬停在控件上时会显示提示文本。它主要提供控件功能说明和自定义显示效果,支持设置显示时间、延迟等属性。核心方法SetToolTip()可为控件添加提示文本。示例代码展示了如何为按钮添加5秒显示、1秒延迟的提示信息,增强界面交互性。(148字)
2025-07-10 13:36:23
36
原创 ZebGraph后台生成图片的方法
摘要:本文介绍了一种无需UI界面、通过后台线程静默生成图片的高效方法。使用System.Drawing和ZedGraph库创建正弦曲线图表,通过Task.Run在后台每5秒自动生成并保存PNG格式图片。代码展示了完整的实现过程,包括图表创建、数据添加、样式设置和内存流保存,适用于需要批量生成图表的场景。该方法避免了UI线程阻塞,提高了图片生成效率。
2025-06-27 09:35:18
40
原创 VS2022的C#打包出错解决
【摘要】系统提示需下载.NET Framework 4.8.1组件以启用离线安装功能。解决方案是将指定文件"NDP481-x86-x64-AllOS-CHS.exe"下载至本地目录。若需发布离线安装包,需将英文版文件"NDP481-x86-x64-AllOS-ENU.exe"放入指定路径。具体操作可参考微软官方链接提供的指导文档。该操作是实现系统必备组件本地化部署的关键步骤。
2025-06-25 11:10:16
105
原创 C#里从CSV文件加载BLOB数据字段到数据库的处理
摘要:本文介绍了使用MySqlBulkLoader类将CSV文件快速导入MariaDB数据库的方法。相比传统SQL导入(约10秒),该方法仅需2秒,效率提升5倍。内容包含CSV文件格式示例、产品类定义及完整实现代码,核心是通过配置MySqlBulkLoader参数(字段分隔符、字符编码等),添加列映射和转换表达式(如BASE64解码),最终调用Load方法执行批量导入。该方法支持自定义数据库连接、表名和字段处理逻辑,适用于需要高效数据迁移的场景。(149字)
2025-06-18 11:38:06
167
原创 C#里从类属性生成CSV文件
本文介绍了一个将对象列表转换为CSV文件的C#实现方案。代码通过反射获取对象属性,支持DisplayName特性作为表头,并自动处理特殊字符(包括逗号、引号和换行符)的转义。特别针对二进制数据(如byte[]类型)采用了Base64编码转换,便于后续存储到数据库。该方案提供ToCsv()和SaveToCsv()两个核心方法,支持自定义分隔符、是否包含表头以及编码格式,实现了稳定可靠的CSV文件生成功能,适用于需要保存大量信号数据供其他程序处理的场景。
2025-06-18 11:24:29
80
原创 C#里与嵌入式系统W5500网络通讯(7)
摘要:W5500芯片的Socket状态机管理方法,介绍了TCP连接的9种状态(如CLOSED、INIT、ESTABLISHED等)及其转换条件。客户端实现流程为:检测Socket状态→CLOSED时初始化→INIT时连接服务器→ESTABLISHED时数据收发→CLOSE_WAIT时关闭连接。关键操作包括socket()初始化、connect()建立连接、getSn_RX_RSR()获取数据长度、recv()/send()数据收发等,通过寄存器操作实现TCP状态转换和数据传输。
2025-06-14 11:50:35
134
原创 C#里与嵌入式系统W5500网络通讯(6)
摘要:文章解析了嵌入式系统中MAC地址写入寄存器的实现方式。通过setSHAR宏定义将MAC地址写入源硬件地址寄存器(SHAR),该宏采用WIZCHIP_WRITE_BUF函数直接操作寄存器,避免了函数调用的开销。文中详细说明了SHAR寄存器的地址构造方法(0x0009偏移)和6字节MAC地址格式,并展示了WIZCHIP_WRITE_BUF函数的底层SPI总线操作实现,包括字节/突发两种写入模式。这种设计体现了嵌入式系统对执行效率和资源利用的优化考量。
2025-06-14 11:06:46
88
原创 C#里与嵌入式系统W5500网络通讯(5)
摘要:代码定义了一个wiz_NetInfo结构体存储网络配置参数,包括MAC地址、IP地址、子网掩码、网关和DNS等字段,支持静态IP和DHCP两种模式。NetworkParameterConfiguration函数演示了如何初始化网络芯片参数:先设置静态IP和网关,然后读取验证配置,最后获取芯片ID确保操作成功。该结构体主要用于嵌入式网络设备的初始化配置,通过CN_SET_NETINFO等控制命令实现参数写入和验证。
2025-06-14 10:43:22
211
原创 C#里与嵌入式系统W5500网络通讯(4)
要修改W5500芯片中socket的收发缓冲区,需执行以下步骤:1. 了解缓冲区作用及硬件资源;2. 通过寄存器Sn_RXBUF_SIZE配置接收缓冲区大小(1-16KB),Sn_TXBUF_SIZE配置发送缓冲区;3. 所有socket缓冲区总和不超过16KB;4. 调用wizchip_init函数初始化,传入二维数组设置各socket缓冲区大小(如默认2KB)。注意需检查缓冲区参数合法性,确保总和不超过限制。代码示例展示了如何通过寄存器操作和函数调用实现配置修改。
2025-06-01 11:24:01
243
原创 C#里与嵌入式系统W5500网络通讯(3)
W5500芯片的PHY配置寄存器(PHYCFGR)用于控制物理层操作模式,地址为0x002E。该寄存器包含7个主要功能位:复位位(RST)、操作模式选择位(OPMD)、模式配置位(OPMDC)、以及三个只读状态位(DPX/SPD/LNK)。其中OPMDC位可配置7种工作模式,包括不同速率和双工设置。硬件初始化时需要检查LNK位(bit0)判断链路连接状态,示例代码展示了通过getPHYCFGR()函数读取寄存器值并检测链路状态的实现方法。该寄存器支持通过软件或硬件引脚两种方式配置PHY模式。
2025-06-01 11:01:51
308
原创 C#里与嵌入式系统W5500网络通讯(2)
在嵌入式系统中,通过SPI接口访问W5500芯片需要遵循特定的通信协议。首先,硬件上需正确连接SPI线路。通信时,数据格式包括16位地址、控制字节(用于选择寄存器和操作模式)以及数据字节。例如,接收缓冲区的地址可通过宏定义计算得出。读写操作通过函数实现:WIZCHIP_READ用于读取数据,WIZCHIP_WRITE用于写入数据。这些函数通过SPI接口发送地址和控制信息,并根据操作模式选择单字节或批量传输。操作完成后,需释放片选信号以结束通信。
2025-05-18 11:42:40
214
原创 C#里使用Prism.Core的例子
在WPF应用程序开发中,使用Prism.Core框架可以显著加速开发过程。首先,通过安装Prism.Core及其依赖包来配置项目环境。接着,创建应用程序的主窗口文件,定义XAML布局和资源,包括数据模板和转换器,用于处理UI元素的显示逻辑。然后,编写后台代码以处理用户交互,如列表项的选择事件。此外,定义数据模型(Models)和视图模型(ViewModels)来管理应用程序的数据和业务逻辑。视图模型中使用Prism的DelegateCommand来处理命令绑定,实现数据的过滤和选择功能。整个开发流程通过模块
2025-05-16 13:24:21
299
原创 C#里WPF使用触发器实现鼠标点击响应
在WPF中,通过自定义用户控件实现鼠标点击事件响应,可以使用事件触发器。在ListView中,每个TextBlock项通过Interaction.Triggers绑定MouseLeftButtonDown事件,触发InvokeCommandAction执行TextBlockClickCommand命令,并传递当前绑定对象作为参数。在ItemMenu类中,TextBlockClickCommand通过RelayCommand初始化,点击时调用OnTextBlockClick方法处理事件。RelayComman
2025-05-12 11:00:33
302
原创 C#WPF里不能出现滚动条的原因
在WPF中使用mdix:DrawerHost.LeftDrawerContent时,默认的RowDefinition高度设置为auto会导致滚动条无法显示。通过将RowDefinition的高度修改为比例值(如*),可以确保ScrollViewer能够正确显示垂直滚动条。具体修改为<RowDefinition Height="*"/>后,ScrollViewer的VerticalScrollBarVisibility属性生效,滚动条得以显示。这种调整适用于需要动态调整内容高度
2025-05-12 08:49:58
262
原创 C#里与嵌入式系统W5500网络通讯(1)wizchip_sw_reset
wizchip_sw_reset()函数用于实现WIZnet网络芯片(如W5500)的软件复位功能。该函数通过向模式寄存器写入复位命令(MR_RST)触发芯片复位,并在复位前后保存和恢复关键网络配置参数,如MAC地址、网关、子网掩码和IP地址,以确保网络配置不变。代码通过条件编译处理间接总线模式下的特殊需求,确保在不同通信模式下正确访问寄存器。复位后,函数通过读取寄存器实现简易延时,确保芯片完全初始化。该函数适用于系统初始化、网络异常恢复等场景,需注意延时和线程安全问题,且不同型号芯片可能存在细微差异。
2025-05-11 12:40:30
145
原创 C#里创建一个MaterialDesign3的导航条
本文详细介绍了如何创建一个带有左侧导航窗口的WPF应用程序。首先,通过XAML定义了主窗口的结构,包括窗口样式、背景颜色、标题栏内容等。接着,使用DrawerHost控件实现了左侧导航抽屉,并通过ToggleButton控制其展开与收起。在代码部分,通过InitMenu方法初始化了导航菜单,使用自定义控件UserControlMenuItem来显示菜单项及其子项。ItemMenu和SubItem类分别用于管理菜单项和子项的数据。最终,通过绑定和布局,实现了左侧导航窗口的动态显示与交互功能。
2025-05-09 17:16:03
242
原创 C#里创建一个TCP客户端连接类
TCP客户端,一般分为两种,一种是同步收发数据,这种需要开发线程来处理。另外一种,就是使用异步连接,这样只需要一个线程,就可以连接很多个。如果连接比较多,就会消耗比较多线程。C#里创建一个TCP客户端连接类。
2025-04-29 16:37:15
417
原创 C#里嵌入lua脚本的例子
以便发现脚本有什么问题,不能在MCU里去发现问题,否则那样会比较困难调试,或者不适合提示。比如在GD32的MCU里运行lua脚本,又者在ESP32里运行它,都是比较方便的。当脚本要发送给MCU运行之前,我们需要在PC的软件里对脚本进行编译,由于lua脚本比较小,并且适用性很强,非常适合嵌入式系统里加入。所以需要在PC里进行预编译,并且进行语法检查是否合法。这样就需要在C#里引入lua脚本引擎。
2025-04-29 08:55:12
535
原创 C#里使用libxl来创建EXCEL文件然后发送到网络
本例子就说明怎么样创建一个EXCEL文件,也可以直接发送到网络,而不需要保存到文件,直接在内存里高效操作。在这里要使用函数SaveRaw,输入参数是保存数据缓冲区和缓冲区的大小,返回数据和大小。前面一个例子说明了从网络直接读取EXCEL数据的方法,
2025-04-26 12:06:48
178
原创 C#里使用libxl来加载网络传送过来的EXCEL文件
如果文件比较小,就不必要这样做了,可以直接保存在内存,然后使用函数LoadRaw就解决了。是不是把数据先保存到文件,再使用传统的方式打开它呢?从服务器传送过来的数据,是一个EXCEL文件,其实这样做,也是可以的,对于比较大的文件来说。那么怎么样获取里面的数据比较合适呢?这样就可以读取EXCEL数据。
2025-04-26 11:57:00
263
原创 C#里使用MaterialDesign时在VS2022里出错
- 新版 Microsoft.Xaml.Behaviors 的声明 -->这样就可以在VS2022里使用materialdesign了,-- 旧版 Blend SDK 的声明 -->需要修改为最后这个才不会出错。
2025-04-13 11:18:44
189
原创 C#里使用MaterialDesign来构造自定义窗口
它是一个采用MaterialDesign开源库来创建的WPF程序。WPF程序要复杂很多,一个简单的工程,就需要写这么多代码。本例子主要就是创建一个上面的界面,
2025-04-11 15:04:21
210
原创 C#里设计Modbus-RTU(Remote Terminal Unit)协议
广泛用于工业自动化领域,支持主从式(Master-Slave)通信架构。从站地址=01,功能码=03,起始寄存器地址=0x006B(十进制107),寄存器数量=3。从站验证地址和CRC后,执行操作并返回响应帧(成功返回数据,失败返回异常码)。返回6字节数据(3个寄存器的值:0x022B, 0x0000, 0x0064),从站地址=01, 功能码=03, 返回字节数量=06, 后面是3个寄存器值。:1字节(如03=读保持寄存器,06=写单个寄存器)。:1字节(0~247,0为广播地址)。
2025-04-09 15:51:51
207
原创 C#里使用libxl来改变字体的特性
因为打印机基本上都是黑白的颜色,只有字体的大小和黑白才能引起人们的关注。因为不同的字体和大小,就突出对不同内容的关注程度。在做报表的过程中,字体是很关键的信息。
2025-04-05 12:58:16
161
原创 C#里第一个WPF程序
WPF程序对界面进行优化,但是比WINFORMS的程序要复杂很多,并且界面UI基本上不适合拖放,所以需要比较多的时间来布局界面,随着客户对界面的需求提高,还是需要采用这样的方式来实现。产且需要开发人员编写更多的代码。即使如此,在面对诱人的界面表现,App.xaml文件中定义。从这几堆代码来看,就比较多。
2025-04-03 14:08:02
259
原创 C#里使用libxl的对齐/边框/颜色
可以把这里的格式做一个初步的了解,根据实际情况来选择不同的内容显示。以便表示一些重要的信息,这样才能让人们一眼就看到需要关注的信息。一份好的EXCEL文件,通道会有不同的颜色和边框来表示。
2025-03-30 18:08:48
297
原创 C#里实现C#脚本单步执行的信息提示
比如在每一行代码后面添加调试信息代码,这样才能达到我们的目标。如果可以把脚本当作单行执行,并输出信息,那么调试就方便很多。如果一个函数作为一个单位,那么调试的颗粒度有点大,要实现上述的目标,需要对于进行调试的代码进行处理。我们常常需要调试脚本,查看脚本是否运行正确。这样对于写脚本人员来说,显然要求有点高。然后再对这样的代码进行编译和运行。当使用C#语言作为脚本运行时,
2025-03-29 18:25:13
399
原创 C#里使用C#语言作为脚本运行的方法
其实可以使用脚本的方式,因为客户可以随便根据脚本来做数据的调整。面向的客户也越来越多,那么需求也越来越多,在C#里使用C#作为脚本是最简单的方式。还有很多的需求是需要去现场调试的。随着开发的软件越来越复杂,这样就导致需要大量的人力。怎么样才能避免这个问题呢?
2025-03-29 17:22:08
225
原创 C#里使用libxl的数字格式
还有科学计算表示的数字使用小数点位数与普通货币也不一样。比如表示货币数字时,与表示普通序号的数字就不一样。由于EXCEL里可以表示不同的数字格式,
2025-03-22 20:11:32
258
原创 C#里使用libxl来对列或行进行分组显示
这时候需要使用函数GroupCols和GroupRows来对这些列或行进行分组。需要把某些行进行隐藏起来,那么就需要使用到行或列进行隐藏的操作。分组不能出现交叉的情况,否则会抛出异常。有时候由于EXCEL里的行数很多,
2025-03-22 19:23:11
396
原创 C#代码经过编译生成CIL代码
这张图体现了 .NET 平台的核心特性:通过 CIL 实现不同语言的统一编译输出,再借助 JIT 编译器在运行时将 CIL 转为机器码执行,最终达成跨语言开发和跨平台运行的能力。////解释:在上述微软中间语言(MSIL)中,存在长度为一或两个字节的操作码。所有其他类所继承的基类声明包含在(微软核心库动态链接库)中。在Main()方法里,ldstr指令将字符串 “GeeksforGeeks” 加载到栈上。接着调用静态的函数,字符串从栈中弹出。最后,ret指令标志着函数调用结束。
2025-03-19 11:04:06
98
原创 C# 模块里cctor函数: mono_runtime_run_module_cctor
静态构造函数用于初始化类的静态成员,它在类的任何静态成员被引用之前或创建类的第一个实例之前自动执行,并且每个类只能有一个静态构造函数。静态构造函数没有访问修饰符,也没有参数。静态构造函数不能直接调用,而是由.NET 运行时自动调用。静态构造函数在类被加载时执行一次,且仅执行一次。
2025-03-15 11:04:06
217
原创 使用python来写出数千万行的excel文件的方法
如果采用内存的方法,内存会比较高的。做了一个测试,100万行11列,就要占用3个G内存。这时就需要采用流式写入EXCEL文件,才能输出上千万行数据。但是用户又不想分开文件保存,必须写在一个EXCEL文件里。通这样的方式,就可以写出上亿行的数据。由于数据量越来越大,
2025-03-13 15:16:52
170
1
原创 C#里最快添加log4net的日志输出
在C#里添加日志支持最快的方法,就是使用log4net。因为它是软件发布之后时行跟踪,调试和改进的关键数据。如果没有日志的软件,必然是一个不成熟的软件。因为它没有办法进行软件的质量改进。日志输出是每一个软件必须的功能,这样就可以有运行的库了。
2025-03-07 15:34:26
251
原创 C#里定义对象序列化保存的例子
C#里定义对象序列化保存的例子由于很多软件有自定义参数,不同的时间使用不同的参数,不同的用户使用不同的参数,这些参数都需要保存到磁盘,以便软件关闭之后再加载出来。面对这样的需求,就需要把软件里参数进行序列化保存,当软件启动时,再把这些参数恢复过来。下面的例子就是使用SerializationInfo 来实现: 代码解释:定义可序列化类:序列化过程:反序列化过程:输出结果:通过这个示例,你可以看到如何使用 类来实现自定义类的序列化和反序列化。
2025-03-03 09:34:25
225
C++读写json文件
2017-12-09
tinyxml2配套源码
2016-06-27
国产8051模拟器
2016-09-10
python抓取天气并分析 实例源码
2017-08-28
胶囊模型的代码
2018-02-02
书《深度学习》
2017-03-13
开源鸿蒙4.0不能进入桌面的补丁
2024-03-17
开源鸿蒙 4.0 RK3566开发板配置
2024-03-17
实现numpy的C++库扩展
2019-11-24
svm_hog_data.rar
2020-03-02
python web py入门配套源代码
2018-02-23
webpy演示例子1
2018-02-21
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人