.NET Emit 入门教程:第六部分:IL 指令:4:详解 ILGenerator 指令方法:参数存储指令
前言: 上一篇介绍了 IL 指令的分类以及参数加载指令,该加载指令以ld开头,将参数加载到栈中,以便于后续执行操作命令。 本篇开始介绍参数存储指令,其指令以st开头,将栈中的数据,存储到指定的变量中,以方便后续使用。 参数存储指令介绍: 在 IL 中,除了参数存储指令 starg 和 stloc 之外,还有其他一些以 "st" 开头的指令,如 stfld 和 stsfld,它们也用于存储值到特定位置。以下是所有的参数存储指令以及它们的用途:starg index:将计算堆栈顶部的值存储到方法的参数中,参数
Advanced .Net Debugging 6:程序集加载器
一、简介 这是我的《Advanced . Debugging》这个系列的第六篇文章。这篇文章的内容是原书的第二部分的【调试实战】的第四章。这章主要讲的是程序集加载器,比如:CLR 加载器简介、简单的程序集加载故障、加载上下文故障、互用性与 DllNotFoundException 和轻量级代码生成的调试。有了这章内容的学习,对于 CLR 如何加载程序集,加载的上下文和算法会有一个充分的了解。当然,有关程序集加载的错误也会有所调试和验证。高级调试会涉及很多方面的内容,你对 . 基础知识掌握越全面、细节
探索Avalonia:C#跨平台UI框架的力量
随着跨平台应用的需求不断增长,开发人员需要一种能够在不同操作系统上运行的用户界面(UI)框架。 Avalonia 是一种引人注目的选择。在本文中,我们将深入了解 Avalonia 是什么,它与 WPF 的区别,以及它的 UI 绘制引擎和原理、优点,以及一个简单的示例代码。 Avalonia 是什么? Avalonia 是一个开源的、跨平台的 UI 框架,旨在为 C# 开发人员提供一种简单且强大的方式来构建桌面应用程序。 借助 Avalonia,开发人员可以使用 XAML 和 C# 来创建应用程序,而这些应
iNeuOS工业互联网操作系统,“低代码”表单开发应用过程(一)
iNeuOS工业互联网操作系统,“低代码”表单开发应用过程(一) 目 录 1. 概述... 2 2. “低代码”表单开发应用过程... 2 1. 概述 iNeuOS工业互联网操作系统“表单设计”功能经过升级后,能够适用于更多应用场景,从业务上来讲可以扩展设备管理、MES等表单类的管理功能,从技术上来讲可以支持数据库单表应用、多级关联表应用、可以自定义写SQL语句等,现在支持22个基础表单组件、9个高级表单组件。 “表单设计”功能分三部分:表单组件、编辑
.NET Emit 入门教程:第六部分:IL 指令:3:详解 ILGenerator 指令方法:参数加载指令
前言: 在上一篇中,我们介绍了 ILGenerat 辅助方法。 本篇,将详细介绍指令方法,并详细介绍指令的相关用法。 在接下来的教程,关于IL指令部分,会将指令分为以下几个分类进行讲解:1、参数加载指令:ld 开头的指令,单词为:load argument2、参数存储指令:st 开头的指令,单词为:ste3、创建实例指令: new 开头的指令。4、方法调用指令:call 开头的指令。5、分支条件指令:br 开头的指令,单词为 break6、类型转换指令:cast 或 conv 开头的指令单词为:conve
Csharp线程
CSharpe线程 目录CSharpe线程C#如何操作线程Thread1. Thread如何开启一个线程呢?2. Thread中常见的API3. thread的扩展封装threadpool一、 . Framewk2.0时代:出现了一个线程池ThreadPool二、线程池如何申请一个线程呢?三、线程等待四、线程池如何控制线程数量Task一、Task开启线程有哪些方式多进程技术的使用场景的分析线程等待线程等待的多种方案Paralell如何批量开启10个线程?如何控制启动线程的数量?线程异常处理线程取消多线程的
ET8.1(一)简介
此系列文章逐个内容讲解ET8.1的新特性。 ET8.1 发布,带来以下新特性: 1. 多线程多进程架构架构更加灵活强大,多线程设计详细内容请看多线程设计课程 2. 抽象出纤程(Fiber)的概念,类似erlang的进程,非常轻松的创建多个纤程,利用多核,仍然是单线程开发的体验 3. 纤程调度: 主线程,线程池,每个纤程一个线程,3种调度方式 4. Fiber间通信的Act消息机制 5. Entity方面,domain改成IScene,只要实现IScene接口,Entity就是domain,
WPF实现树形表格控件(TreeListView)
前言本文将探讨如何利用WPF框架实现树形表格控件,该控件不仅能够有效地展示复杂的层级数据,还能够提供丰富的个性化定制选项。我们将介绍如何使用WPF提供的控件、模板、布局、数据绑定等技术来构建这样一个树形表格。 一、运行效果 1.1默认样式1.2 自定义样式二、代码实现 2.1 创建自定义控件(TreeListView) 新建一个继承自TreeView的控件,并定义一个类型为ViewBase的View依赖属性,用于在代码中指定列。public class TreeListView : TreeV
学习Source Generators之从swagger中生成类
前面学习了一些Source Generats的基础只是,接下来就来实践一下,用这个来生成我们所需要的代码。 本文将通过读取swagger.json的内容,解析并生成对应的请求响应类的代码。 创建项目 首先还是先创建两个项目,一个控制台程序,一个类库。添加swagger文件 在控制台程序中添加Files目录,并把swagger文件放进去。别忘了还需要添加AdditionalFiles。 ItemGroupAdditionalFiles Include="Files\swagger.json" ItemGr
TensorRT C# API 项目介绍:基于C#与TensorRT部署深度学习模型
TensRT C# API 项目介绍:基于C#与TensRT部署深度学习模型1. 项目介绍 NVIDIA® TensRT™ 是一款用于高性能深度学习推理的 SDK,包括深度学习推理优化器和运行时,可为推理应用程序提供低延迟和高吞吐量。基于 NVIDIA TensRT 的应用程序在推理过程中的执行速度比纯 CPU 平台快 36 倍,使您能够优化在所有主要框架上训练的神经网络模型,以高精度校准低精度,并部署到超大规模数据中心、嵌入式平台或汽车产品平台。TensRT 基于 NVIDIA CUDA® 并行编
学习Source Generators之IncrementalValueProvider
前面我们使用了IIncrementalGenerat来生成代码,接下来我们来详细了解下IIncrementalGenerat的核心部分IncrementalValueProvider。 介绍 IncrementalValueProvider是基于管道的模式,将我们需要的数据进行处理转换后传递给SourceOutput。 目前官方提供可用的Providers有如下几种:CompilationProvider AdditionalTextsProvider AnalyzerConfigOptionsProvi
socket 接收数据时粘包处理 c# winform
socket在接收数据时,经常会因为网络延迟、缓存区数据处理不及时等原因造成收到的数据是多个包黏在一起的情况。如下图所示 图中红色框部分是通讯的 心跳包 图中黄色框部分和未框选部分是 两包 数据包 所以可见此时缓存区里面同时存在了一个心跳包,两个数据包 如何分包(此处仅针对几个完整的数据包在一起的情况) 一般在定义通讯协议的时候就会把 前几位 定义为指示数据包长度的位 例如上图中红色框内前四位是 0020 就表示这个数据包长度为 20 位 上图黄色框内前四位是 0231 就表示这个数据包长度为 23
WPF中封装一个自己的MessageBox
前言 在WPF应用程序开发中,我们可以借助其强大灵活的设计能力打造出绚丽而富有创意的用户界面。然而,与这种高度定制化的界面相比,标准MessageBox却显得有些原始和古老。它的外观与现代、绚丽的应用界面格格不入,使得用户在交互中可能感到突兀或不符合预期。 本文将深入探讨如何在WPF中封装自定义MessageBox,使其能够融入应用程序整体设计,呈现出与应用界面一致、时尚而个性化的效果。突破了MessageBox的界面限制后,开发者可以为用户提供更一体化、更愉悦的界面交互体验。 一、需求
Elasticsearch 系列(五)- 数据聚合
本章将和大家分享 Elasticsearch 中的数据聚合功能,通过聚合(aggregations)可以实现对文档数据的统计、分析、运算。 一、数据聚合聚合的分类 聚合(aggregations)可以实现对文档数据的统计、分析、运算。聚合的官方文档地址:https:www.elastic.coguideenelasticsearchreferencecurrentsearchaggregations.html 聚合常见的有三类: 1)桶(Bucket)聚合:用来对文档做分组TermAggregation:
强烈推荐:2024 年12款 Visual Studio 亲测、好用、优秀的工具,AI插件等
工具类扩展 1. ILSpy 2022 (免费)ILSpy 是 ILSpy 开源反编译器的 Visual Studio 扩展。是一款开源、免费的、且适用于.平台反编译【C#语言编写的程序和库(.dll)内容】工具;可以集成在Visual Studio 开发工具中,能够十分快捷方便的查看源代码内容。其中包括:1.项目案例 2.NuGet 包 3.您的代码:方法、属性等扩展地址:https:marketplace.visualstudio.comitemsitemName=SharpDevelopTeam.
WPF如何封装一个可扩展的Window
前言 WPF中Window相信大家都很熟悉,有时我们有一些自定义需求默认Window是无法满足的,比如在标题栏上放一些自己东西,这个时候我们就需要写一个自己的Window,实现起来也很简单,只要给Window设置一个WindowChrome.WindowChrome附加属性就可以实现,WindowChrome 可以让你自定义窗口的非工作区的外观和行为。非工作区就是窗口的标题栏和边框,通常由操作系统绘制和管理。WindowChrome 可以让你将 WPF 的内容扩展到非工作区,同时保留一些系统的功能
一个可以让你有更多时间摸鱼的WPF控件(二)
前言 上文介绍了如何通过一个Fm自定义控件来简化数据的录入,并自动实现数据校验,自动布局排列等功能。本文继续介绍如何优化表格控件的使用,缩减代码量,实现工作效率的提升。 一、功能实现 上文中分析了DataGrid跟ListView两种表格控件的优劣,在这里我们选择ListView来实现我们的表格功能,如有疑问请看上一篇文章,这里不再赘述。 下面我们定义一个ListViewExtensions静态类来实现ListView的附加属性,并在附加属性更改后实现ListView的优化功能。public
gRPC入门学习之旅(四)
gRPC入门学习之旅(一) gRPC入门学习之旅(二) gRPC入门学习之旅(三) 实现定义的服务9.在“解决方案资源管理器”中,使用鼠标左键选中“Services”文件夹,然后在菜单栏上,依次选择“添加新建项”。 10.在“添加新项”对话框中,选择“ASP. Ce代码”节点,然后选择“类”项。 11.在“名称”文本框中,输入 UserService.cs,然后选择“添加”按钮。如下图。 12.在文本编辑器打开的UserService.cs类文件,编写如下代码:using Demo.GrpcSer
NET Core使用Grpc通信(一):一元请求
gRPC是一个现代的开源高性能远程过程调用(RPC)框架,它可以高效地连接数据中心内和跨数据中心的服务,支持负载平衡、跟踪、运行状况检查和身份验证。 gRPC通过使用 Protocol Buffers 作为数据传输格式,实现了在不同平台上的通信,并支持双向流和流式传输。RPC 是远程过程调用的缩写,实现跨服务器调用。在开发中,规定调用规则、网络传输协议以及数据序列化反序列化规范是确保前后端通信规范性的关键。 了解GRpc前需要了解Rpc概念。 什么是 RPC RPC 是 Remote Procedure
WPF实现placeholder效果
概述:WPF中通过`Style`实现TextBox水印文本,使用`WatermarkTextBox`类及`ControlTemplate`。这个示例通过`VisualStateManager`在文本框失去焦点且内容为空时显示水印文本。通过`Watermark`属性简化水印文本设置,提高可维护性。 在WPF中,通过Style实现TextBox中的水印文本(水印、提示、占位符文本)通常使用ControlTemplate和VisualStateManager。以下是一个详细的实例源代码: using Syste
浅谈WPF之属性系统
在WPF开发中,经常听到各种属性,如:依赖属性,附加属性,CLR属性,那这些不同类型的属性,具体又有什么作用呢?今天以一些简单的小例子,简述一下WPF开发中,各种属性的相关概念和应用,仅供学习分享使用,如有不足之处,还请指正。 CLR属性 CLR属性(Common Language Runtime),又称为. 标准属性,是对类中私有字段(private)的安装访问包装。通过属性,可以对调用对象输入的值进行校验,拦截等。 在属性出现之前,如果要对公开字段进行内容校验,则需要通过公开的方法进行调用,而且
WPF控件轻松查找:通用类库助您按名称或类型定位控件
概述:WPF中按名称或类型查找控件可通过通用类库实现。提供的`ControlFinder`类库包含方法,可轻松在VisualTree中查找并操作WPF控件。通过示例展示了按名称和按类型查找按钮和文本框的用法,增强了控件查找的便捷性。 在WPF中,按名称或类型查找控件通常涉及使用FindName方法或递归遍历VisualTree。下面提供一个通用的类库,其中包括按名称和按类型查找控件的方法: using System using System.Collections.Generic using System
文件名按数字排序,可以排序多组数字,尤其是99-333~~_222这种复杂数字组合的文件名或字符串
这是我本人编写的一个排序算法,主要就是解决复杂多组数字组合的这种文件名或者字符串的排序,排序主要规则就是从前往后对每一组数据进行排序,效果及截图如下:以下是使用方法: 第一步 搜索和安装我的Nuget包 搜索和安装zmjtool这个包,我写的,如下图:第二步 使用HMSter的St方法进行排序1 引入命名空间 2 using ZmjTool 3 要排序的内容 4 var fs = System.IO.Directy.GetFiles("H:\\中文韩漫\\[韩漫][图片]\\[中文韩漫]H校园第一季\\0
可能是迄今为止最好用的WPF加载动画功能(没有之一)
前言当我们在开发应用程序时,用户体验往往是至关重要的一环。在应用程序加载大量数据或执行复杂操作时,为用户提供一个良好的加载体验变得至关重要。加载动画是其中一个有效的方式,它不仅能够告知用户应用程序正在进行工作,还能够缓解用户在等待过程中的焦虑感。 一.需求分析 开发一个加载动画比较常见的做法一般有以下两种。 一种是直接在控件的上层添加一层半透明遮罩,在遮罩上面显示加载动画,需要显示加载效果的时候将这个遮罩显示出来,加载完成以后隐藏这个遮罩,这种方式虽然也能实现需求,但是缺点也很明显,每次要
记一次 .NET某防伪验证系统 崩溃分析
一:背景 1. 讲故事 昨晚给训练营里面的一位朋友分析了一个程序崩溃的故障,因为看小伙子昨天在群里问了一天也没搞定,干脆自己亲自上阵吧,抓取的dump也是我极力推荐的用 procdump 注册 AEDebug 的方式,省去了很多沟通成本。 二:WinDbg分析 1. 为什么会崩溃 windbg有一个非常强大的点就是当你双击打开后,会自动帮你切换到崩溃的线程以及崩溃处的汇编代码,省去了 !analyze v 命令的龟速输出,参考信息如下:...................................
记一次WPF的DataGrid绑定数据
之前一直在用winfm,但是感觉界面不好看,然后就自己在网上学习WPF。一开始看到DataGrid的时候,还以为它是DataGridView,然后用winfm的方法绑定数据发现不行,在不断的查找之后,终于学会了怎么简单的绑定数据。 工具:VStudio2022 框架:. framewk 4.8 新建一个WPF窗体,再把DataGrid拖到窗体上之后,在.xaml那给它配置name属性dataGrid由于我是想自己手动建列,所以把AutoGenerateColumns属性设置为false,如果不想手动设置列
Csharp中表达式树
Csharper中的表达式树 这节课来了解一下表示式树是什么? 在C#中,表达式树是一种数据结构,它可以表示一些代码块,如Lambda表达式或查询表达式。表达式树使你能够查看和操作数据,就像你可以查看和操作代码一样。它们通常用于创建动态查询和解析表达式。 一、认识表达式树 为什么要这样说?它和委托有什么区别? 创建一个简单的表达式树和委托public class ExpressionDemo{void Show(){Funcint bool fun1 = x = x 10ExpressionFuncin
【OpenCV】OpenCV (C++) 与 OpenCvSharp (C#) 之间数据通信
OpenCV是一个基于Apache2.0许可(开源)发行的跨平台计算机视觉和机器学习软件库,可以运行在Linux、Windows、roid和Mac OS操作系统上。 它轻量级而且高效——由一系列 C 函数和少量 C++ 类构成,同时提供了Python、Ruby、MATLAB等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法。OpenCV用C++语言编写,它具有C ++,Python,Java和MATLAB接口,并支持Windows,Linux,roid和Mac OS,OpenCV主要倾向于实时视觉
深度探索.NET Feature Management功能开关的魔法
前言 . Feature Management 是一个用于管理应用程序功能的库,它可以帮助开发人员在应用程序中轻松地添加、移除和管理功能。使用 Feature Management,开发人员可以根据不同用户、环境或其他条件来动态地控制应用程序中的功能。这使得开发人员可以更灵活地管理应用程序的功能,并根据需要快速调整和部署新功能。 Feature Management 还提供了一些方便的工具和 API,帮助开发人员更轻松地实现功能管理和控制。 安装. CLIdot add package Microsoft
WPF自定义Panel:让拖拽变得更简单
在 WPF 应用程序中,拖放操作是实现用户交互的重要组成部分。通过拖放操作,用户可以轻松地将数据从一个位置移动到另一个位置,或者将控件从一个容器移动到另一个容器。然而,WPF 中默认的拖放操作可能并不是那么好用。为了解决这个问题,我们可以自定义一个 Panel 来实现更简单的拖拽操作。 自定义 Panel 的优点有很多。首先,我们可以根据自己的需求来设计 Panel 的外观和行为。其次,我们可以使用代码来控制拖放操作的细节,比如拖放的开始和结束位置、拖放过程中控件的显示方式等等。最后,我们可以将自