- 博客(42)
- 收藏
- 关注
原创 gRPC的基本使用
在Protcol项目中,新建一个文本,更改扩展名为:proto,如上:test.proto。//如果需要引用其它的协议//服务类//枚举示例NONE = 0;Move=1;Scan=2;//空对象示例//多数据类型示例//intint32 id=1;//long// float// string// enum// RepeatedField<string> 一定不为null,相当于 array。
2024-12-15 10:45:16
976
原创 .net framework手动升级到.net core注意点
C:\Program Files\Microsoft Visual Studio\2022\Community\MSBuild\Current\Bin\amd64\Microsoft.Common.CurrentVersion.targets(2302,5): warning MSB3270: 所生成项目的处理器架构“MSIL”与引用“D:\work\project\xxx\Utils\xxx\....\Debug\xxx.dll”的处理器架构“x86”不匹配。事件编译,新旧不一样,需要修改。
2024-12-14 19:33:38
1537
原创 WPF软件花屏的解决方法
即:WPF的界面不能正确渲染或及时刷新,导致整个界面会出现严重的残影,严重影响使用。如果显卡驱动存在兼容性问题,那么硬件加速很有可能会出现异常情况,比如说花屏。根据业务要求,也可以将此更改作为配置项处理,如果出现花屏,可尝试关闭硬件加速。出现花屏的原因有多种,有可能是WPF的渲染线程挂了,也有可能是驱动问题。我们都知道,WPF的渲染,除了使用CPU渲染以外,还可以基于。如果更新显卡驱动无效,那么我们可以在软件中关闭硬件加速。Win10操作系统更新后,软件花屏了。解决此问题的思路也比较简单,?
2024-12-03 19:31:01
733
原创 如何正确获取系统版本号
获取到的系统版本号会存在不同的系统版本,版本号是一样的情况。细心的同学会发现,我们通过内置函数Environment.OSVersion。实现方法比较简单,就不做描述,以下是完整可用的代码。
2024-12-01 08:54:43
486
原创 .NET Md5加密异常处理
操作系统更新后,软件出现各种bug~ 乍一看,md5加密算法跪了!为啥会出现md5算法崩溃呢?原因是操作系统开启了FIPS,而md5并不是FIPS(Federal Information Processing Standards 即(美国)联邦信息处理标准)中的一个部分,这就导致了异常的发生!要解决这个问题,思路很简单:关闭FIPS或者本软件关闭FIPS。
2024-11-30 21:30:01
1013
原创 通过代码实现log4net自定义配置
大家在使用log4net的时候,常规的用法都是在配置文件里面进行设置。但是配置文件里面的配置项非常多,不利于记忆,所以说我们希望他能直接在代码中设置。于是,我写了个自定义日志配置的方法,核心的配置对象为。下面给大家展示下,基于使用场景下的日志服务示例。,只需要对他进行设置就可以了。
2024-11-29 21:03:51
532
原创 如何在Canvas上实现元素按中心点坐标作为相对坐标
聪明的小伙伴可以发现,其实实现这个功能非常简单,只需要在。这个问题,相信大部分同学都知道,实现这个效果,只需要对。没关系,微软不告诉你,我告诉你。但是这种方法,虽然可以实现,但是它不太好放到。上去实现,也没有那么方便。上的子元素进行坐标换算。
2024-11-28 20:51:02
476
原创 如何绑定到数组数据源上指定索引的项上
WPF的绑定机制提供了非常便利的数据更新途径,在实际业务中,我们可以会遇到我们的UI组件,需要绑定到数据源上的某个数组中的指定的索引项。这种场景相对来讲是比较少用……实际上,使用起来还是非常简单的,只需要在我们绑定的数据属性上,增加索引编号即可。
2024-11-27 20:43:01
477
原创 Xaml文件如何省去命名空间的前缀
平常开发过程中,我们自定义的控件/组件,在使用的过程中,都需要加上命名空间的前缀,否则的话编译就会出错。这让我们开发过程中,就显得比较麻烦。跟框架自带的组件一样使用?这里需要注意下,因为改逻辑是放在AssemblyInfo.cs。文件中,使用之前,一定要记得先编译下这个库才会有智能提示出来。方法比较简单,就是在我们程序集的声明中,增加如下声明。通过这种方式,我们的编码效率又能得到小步提升了。,可以通过 false 来关闭自动生成的。或者Microsoft.NET.Sdk。,手动来创建这个文件。
2024-11-27 20:38:59
581
原创 如何通过docker容器将ASP.NET Core站点部署到CentOS
上一篇我们讲了如何将asp.net core部署到linux系统上,这次我们以docker容器的方式把我们的站点部署到linux系统中使用Docker来部署,其实比我们常规的部署方式更简单。因为Docker的存在,本来就是把复杂的事情简单化,让我们可以“一次部署,处处可用”。如果你是使用windows操作系统,首先记得先安装好 docker for windows,不清楚怎么安装可以自行查阅资料。
2024-11-24 19:09:54
623
原创 WPF异步UI交互功能的实现方法
前面的文章我们提及过,异步UI的基础实现。基本思路主要是开启新的UI线程,并通过VisualTarget将UI线程上的Visual(即RootVisual)连接到主线程上的UI上即可渲染显示。下期我们再实现异步UI在XAML上的编辑能力,可以在xaml中添加普通的xaml代码一样简单使用。但是,之前的实现访问是没有交互能力的,视觉树上的UI并不能实现鼠标事件。因为我们的UI是在异步线程上,它的功能受到一定的阉割,它并不能直接响应鼠标或者键盘事件。有了上述代码,我们的异步UI具备了交互能力。
2024-11-23 12:27:25
709
原创 WPF 手把手教你写跨线程UI控件
多线程UI,是winform里面是一件非常简单的事情,然而在WPF里面,想要做到跨线程的UI渲染,可就没那么简单了。我们知道,在Winform中,我们只需要在多线程里直接new一个新的窗口就可以实现多线程UI了。这对我们解决UI卡顿的问题有一定的帮助。今天我们重点来学习一下,在WPF程序中,怎么去实现一个跨线程UI控件。
2024-11-22 22:15:50
837
原创 Xaml文件如何省去命名空间的前缀
平常开发过程中,我们自定义的控件/组件,在使用的过程中,都需要加上命名空间的前缀,否则的话编译就会出错。这让我们开发过程中,就显得比较麻烦。","命名空间", AssemblyName = "程序集名称")],可以通过 false 来关闭自动生成的AssemblyInfo。这里需要注意下,因为改逻辑是放在AssemblyInfo.cs。文件中,使用之前,一定要记得先编译下这个库才会有智能提示出来。方法比较简单,就是在我们程序集的声明中,增加如下声明。通过这种方式,我们的编码效率又能得到小步提升了。
2024-11-21 06:52:05
324
原创 WebView2的踩坑记
参见:https://learn.microsoft.com/zh-cn/microsoft-edge/webview2/release-notes?WebView2的层级是置顶的,到导致内嵌WebView2只能在最顶层。因为WebView2是以组件的方式嵌在WPF程序中,所以它的渲染层级是置顶的。反馈页面:ttps://github.com/MicrosoftEdge/WebView2Feedback/issues/2782。Win7系统下,不支持父级窗口透明,否则会出现页面渲染不出来的问题。
2024-11-19 07:55:15
3609
原创 WPF如何全局应用黑白主题效果
灰白色很多时候用于纪念,哀悼等。那么使用WPF如何来做到这种效果呢?要实现的这种效果,我们会发现,它其实不仅仅是要针对图片,而是要针对整个窗口来实现灰白色。如果只是针对图片的话,我可以可以对图片进行灰阶转换,即可达到灰色效果。上述方法也可以直接在xaml里面表示。如果我们想针对整个窗口应用这种灰色的效果,那我们可以用着色器特效()来实现。
2024-11-17 12:24:51
806
原创 [WPF] RichTextBox如何显示省略号?
通常用富文本显示内容,通常是可以支持滚动显示,所以常规场景下是用不到省略号的。但是也不乏有些场景需要用到 省略号。比如:文本内容的简述。组件,它是一个相对比较轻量的文本组件,使用频率也是比较高的。RichTextBox是个很强大的文本组件,它可以用于显示各种复杂的富文本。下面来分享一种比较简单的实现方法,来实现富文本省略号逻辑。来支持省略号的思路就比较简单,只需要在它的段落里面,内嵌。以上方法,就可以简单的实现省略号的功能了。,可以用来显示省略号。
2024-11-16 20:22:25
702
原创 Visual Studio 如何在终端窗口内嵌git bash
git是个很强大的版本管理工具,使用git命令行有的时候可以大幅提高工作效率(主要是GUI找菜单慢,有的时候还很卡)。为了更加方便的使用git命令,我们可以在Visual Studio中直接打开 git bash。后续写git命令就可以跟在外部使用git bash一样,包含有智能补全功能。打开终端后,按如下步骤添加git bash。具体操作如下:选择菜单“视图”->"终端"点击应用后就可以选择使用了。
2024-11-15 07:12:14
756
原创 Path.Combine容易被忽略的细节
Path.Combine这个方法是很常用的一个方法,通常用它来拼接路径。尤其是存在对路径有跨平台的场景,更应该使用它来处理路径拼接。有这段注解应该就很好理解了,因为我们需要拼接的字符串中,以/或'\'开头,那么它将忽略前面的参数。所以我们在处理路径拼接的时候,一定要注意下这种场景,它会导致隐藏的BUG。那Path.Combine会存在怎么样的一个问题呢?以上代码中 result 结果会是什么呢?实际上,结果是 /image.png。
2024-11-14 22:05:30
457
原创 C# 如何动态加载程序集
程序集的加载,默认是从当前目录下查找,如果当前目录查找不到,然后再去系统目录中查找,依然查找不到就会从环境变量中查找,如果依然找不到,则会抛出一个异常 FileNotFoundException。但是这里需要注意的是,程序集加载失败会触发该事件。如果是程序集本身可以加载,但是因为目标平台不对则会引发异常,并不会触发该事件。事件可以帮助我们去监听程序集加载失败,并请求重新加载程序集,我们可以在这里事件中去处理程序集的查找工作。.NET CORE 项目本身包含该机制,可以自动查找。
2024-11-13 07:33:51
717
原创 初识Python:IDE篇
功能丰富,如调试、语法高亮、项目管理、代码跳转、智能提示、自动完成、单元测试、版本控制等功能,使用起来也很方便。有了Visual Studio的快捷键,习惯于使用Visual Studio的我们,就能更快的上手了。作为一名.NET开发人员,本身就比较习惯使用Visual Studio,那么也可以考虑使用它来做一些简单的入门,用来熟练下Python的语法。安装完成后(安装步骤按默认选项即可),我们先设置下快捷键映射,文件->设置->插件->Visual Studio Keymap(安装该插件)
2024-11-12 08:00:58
1056
原创 如何使用ffmpeg命令行进行录屏
录屏软件,我们去网上下载,发现有很多软件都是要收费的!但是录屏功能很难做吗?是一个非常成熟的音视频处理软件,而且是开源的。于是我整了个小demo,用于实现基础的屏幕录制功能。方式实现更简单,更轻量,兼容性也更好,所以我们采用。基于该方法,主要核心就是。
2024-11-10 11:46:22
1453
原创 如何构建多平台nuget包
虽然C#可以直接编译成 AnyCPU,可以直接在 x86, x64, ARM平台运行。但是实际项目中,我们可能避免不了会引用一些外部的依赖库,而这些外部依赖库又不能编译成 AnyCPU!通常解决这种问题可以通过进程隔离来解决,也可以通过动态加载程序集来解决。所以采用动态程序集加载的方式的话,我们的包就需要同时把 x86,x64,arm相关的运行库同时打包进去了。构建多平台nuget包之前,需要先了解一些基础知识:手动创建nuget包的基本方法nuget的目录结构。
2024-11-09 10:46:26
693
原创 通过第三方工具打nuget包
在.net core 的版本上,visual studio 已经提供了自动打包的功能。当然,在.NET Framework的版本上也是可以的,不过需要收到修改proj文件才行,这个下次再做讨论。在Visual Studio不具备一键打包的功能时,我们可以使用第三方软件来实现nuget包的打包。左侧是可视化的包信息配置,按需求填写即可,依赖性也可以在这里添加。专注于.NET技术开发的博主,关注我个人。专注于.NET技术开发的博主,关注我个人。查看更多:承哥技术交流小作坊。查看更多:承哥技术交流小作坊。
2024-11-08 09:51:30
683
原创 WPF缩放动画和平移动画叠加后会发生什么?
最终得出结论:平移和缩放两种变化叠加的时候,平移变换的偏移量也会跟着做缩放。为了确定数据的准确性,我们可以增加几组数据做下测试对比,这里就省略了~WPF实现边平移,边缩放的动画效果,它的平移坐标应该怎么计算?元素缩放后,平移的坐标值不会随着缩放的比例而发生变化。元素缩放后,平移的坐标值,会跟随缩放的比例发生变化。,显然跟实际结果不一致。,跟实际结果完全一致。
2024-11-06 07:55:44
628
原创 C# 几个基础位运算
以上就是完整代码,要用来做一些开关的功能还是非常实用的。虽然现在内存比较大,可能都很少用这种方式。但是用它来判断全关还是非常方便的。逻辑与运算(&):位逻辑与运算将两个运算对象按位进行与运算。0&0=0,0&1=0,1&0=0,1&1=1.逻辑或运算(|):位逻辑或运算将两个运算对象按位进行与运算 0|0=0,0|1=1,1|0=1,1|1=1。通过使用二进制位(bit)来做开关,是个不错的选择。使用二进制作为开关,主要是针对不同的位进行赋值。位逻辑非运算(~):1变0,0变1。
2024-11-05 07:57:45
902
原创 WPF如何使用外部字体
这种方案需要管理员权限才能安装,并且安装的字体路径在不同(win7,win10,win11)的操作系统里面不尽相同。整个安装过程相对会麻烦一些,卸载软件的时候,还得考虑需不需要卸载我们软件安装的字体。于是我们有了第二种方案,免安装使用字体!一种方式就是给系统安装该字体,这种方式安装的字体能够全局生效。第二种方法就是免安装,直接加载字体资源。当我们所使用的字体,系统不存在怎么办?
2024-11-04 08:51:48
663
原创 WPF如何实现图片按像素拉伸
目前的测试代码还不支持不同分辨率的图片,demo中的计算是使用了ImageSource的宽高。要实现不变形的拉伸功能,我们可以针对1个像素来进行拉伸,这样拉伸出来的图片,除了拉伸区域的像素都是一样的,其它区域还是保留了原来的图片的外观。微信聊天气泡这种场景,它需要支持水平和垂直的方向的拉伸效果,我们可以利用 CroppedBitmap。,他的宽度和高度可以根据我们输入的内容自动调整,并且背景图片也不会存在变形的问题。,将原始图片裁剪成9张图,渲染的时候,我们分别将9张图渲染到对应的位置。
2024-11-03 11:21:51
679
原创 [WPF] IMultiValueConverter的Values直接返回会怎样?
IMultiValueConverter接口,我们在写wpf程序的时候应该是比较熟悉了,这个接口主要用于实现多路数据绑定转换器。
2024-11-02 20:44:07
339
原创 使用FFMpeg.AutoGen播放音频
在“使用FFMpeg.AutoGen播放视频”一文中已经解决了FFMpeg.AutoGen的基本用法,这期来补充下使用FFMpeg.AutoGen播放音频的逻辑。最后别忘记针对上述解码上下文等对象进行内存释放,这里就不做展示了。结合上一期的视频播放逻辑,串起来就可以进行播放了。专注于.NET技术开发的博主,关注我个人。专注于.NET技术开发的博主,关注我个人。查看更多:承哥技术交流小作坊。查看更多:承哥技术交流小作坊。
2024-11-01 09:33:34
772
2
原创 async await 实现自定义的可等待任务
async await 语法是一个非常好用的异步编程语法,它能够非常轻松的实现异步代码的编写,同时符合人类的思维习惯。如果我想让这种异步状态机,能工作在我自定义的线程里面要怎么办呢?
2024-10-31 14:51:36
519
原创 WPF如何实现“不用写转换器的Binding”
Xaml中的Binding语法是WPF的中的灵魂,但是很多业务场景下,我们都需要通过IValueConverter接口来实现一个转换器。
2024-10-30 09:46:57
506
原创 C# 如何给文件夹赋予权限,以解决权限不足问题
我们知道,windows操作系统系统盘的权限控制是比其它磁盘更严格的。我们应用程序如果想在C盘下进行文件读写,大部分需要管理员权限才行(像AppData,ProgramData这种目录除外)
2024-10-30 09:36:30
1014
原创 WPF 依赖项属性的AddOwner与OverrideMetadata区别
WPF中的依赖项属性的AddOwner与OverrideMetadata有何区别?什么情况下使用AddOwner?什么情况下使用OverrideMetadata呢?
2024-10-29 09:21:29
547
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人