摘要: 闭包、弱引用的简单概念,大佬们描述的很多,有不了解的可以看看: 理解C#中的闭包 - 黑洞视界 - 博客园 (cnblogs.com) C#弱引用(WeakReference) - 简书 (jianshu.com) 组里小伙伴报了个BUG,定义的封装事件DeviceDown不生效了 瞅了下,貌似没啥 阅读全文
posted @ 2023-01-28 19:45 唐宋元明清2188 阅读(18) 评论(0) 推荐(0) 编辑
摘要: 我们都知道路由事件,而附加路由事件用的比较少。 但如果是通用的场景,类似附加属性,附加事件就很有必要的。 举个例子,输入设备有很多种,WPF中输入事件主要分为鼠标、触摸、触笔:WPF 屏幕点击的设备类型 - 唐宋元明清2188 - 博客园 (cnblogs.com) 有这么多输入事件Mouse、To 阅读全文
posted @ 2022-12-29 14:49 唐宋元明清2188 阅读(295) 评论(0) 推荐(1) 编辑
摘要: 今天看书,上面介绍implicit和explicit相对冷门,用的较少。 这个implicit类型虽然冷门,但真的很有用。我在自己的项目里就用了这个 上Demo, 1 public partial class MainWindow : Window 2 { 3 public MainWindow() 阅读全文
posted @ 2022-09-27 23:30 唐宋元明清2188 阅读(98) 评论(0) 推荐(0) 编辑
摘要: 问题描述 我这里有个进程间通信组件,用于提供多应用间通信的解决方案。 进程间通信,分为客户端和服务端,俩端肯定会有些共性代码,所以加了个H3C.Channel.Core项目 因为之前还不太了解nuget这块,然后我就踩到了坑: 引用H3C.Channel.Client包后,H3C.Channel.C 阅读全文
posted @ 2022-08-28 17:56 唐宋元明清2188 阅读(123) 评论(3) 推荐(0) 编辑
摘要: 擦除区域与橡皮大小不一致 测试反馈,擦除区域与真实的橡皮大小不一致: 上图中,橡皮显示是圆形的,但擦除效果是一个“8边形”区域。 找了一台8K屏,确实是能复现的: 看到这个诡异的8边形,一开始我是以为是逗逼小伙伴在手势识别模块写出来的BUG 但开发肯定不会弄这么规整的形状出来,所以还是要看下擦除模块 阅读全文
posted @ 2022-08-16 21:53 唐宋元明清2188 阅读(89) 评论(2) 推荐(1) 编辑
摘要: 控制台应用,程序的主线程是工作线程(MTA)。 所以如果在控制台应用中,弹出窗口,需要额外创建STA线程,如下所示: 另外,通过调试我们看到,控制台主线程跑完后,其实就销毁掉了。 如果是WPF应用程序,主线程是UI线程,从App的初始化位置可以看到,Main函数标记了STA线程的特性标签。如下图: 阅读全文
posted @ 2022-08-13 01:07 唐宋元明清2188 阅读(248) 评论(0) 推荐(0) 编辑
摘要: 获取系统已安装的.NET版本,来确定当前应用可运行的环境。 微软已经有相应的完整文档,请参考:确定已安装的 .NET Framework 版本 - .NET Framework | Microsoft Docs Release根据文档描述是版本密钥,应该是类似版本构建号,能够判断是否已安装.NET。 阅读全文
posted @ 2022-07-14 17:26 唐宋元明清2188 阅读(262) 评论(0) 推荐(0) 编辑
摘要: 关于锁,我们经常会使用lock object对象,进行资源访问的限制。 但,lock是有限制的,无法添加异步方法。编译器会报错。 下面推荐另一个类SemaphoreSlim,这是信号量的一个使用类。先看下面的使用: 1 private async void MainWindow_Loaded(obj 阅读全文
posted @ 2022-06-10 01:08 唐宋元明清2188 阅读(224) 评论(1) 推荐(1) 编辑
摘要: 当WebSocket服务端未启动时,我们在客户端申请连接,会报 System.Net.Sockets.SocketException 异常。 当然,我们调试时异常设置默认是不勾选这个的。所以不影响正常调试。 但小伙伴发现,依然会影响界面卡顿,尤其是书写性能受影响。 所以,需要确认判断服务端是否已启动 阅读全文
posted @ 2022-04-19 19:47 唐宋元明清2188 阅读(189) 评论(0) 推荐(0) 编辑
摘要: 如果界面点击时,不想让窗口激活,可以按如下操作: 1 public MainWindow() 2 { 3 InitializeComponent(); 4 SourceInitialized += OnSourceInitialized; 5 } 6 private void OnSourceIni 阅读全文
posted @ 2022-03-29 00:51 唐宋元明清2188 阅读(126) 评论(0) 推荐(0) 编辑
摘要: 如何获取当前窗口层级上方的所有窗口信息 User32有函数GetWindow function (winuser.h) - Win32 apps | Microsoft Docs,可以根据已知窗口句柄,获取指定类型的窗口。 1 [DllImport("user32.dll", SetLastErro 阅读全文
posted @ 2022-03-15 20:14 唐宋元明清2188 阅读(455) 评论(1) 推荐(1) 编辑
摘要: 本章介绍如何通过句柄,截取指定窗口内容,以及截取失败的场景 一、根据窗口句柄获取窗口截图 先创建一个测试窗口程序A,显示如下: 同时我们把此窗口的句柄显示到一个文本输入框内。 1 TestBox.Text = new WindowInteropHelper(this).Handle.ToString 阅读全文
posted @ 2022-01-05 21:43 唐宋元明清2188 阅读(1830) 评论(0) 推荐(0) 编辑
摘要: 一、问题描述 在下面的截图中,我们发现,源码有添加一段注释。 然后通过Nuget包引用,在VS中用Reshaper反编译时,发现没有注释: 原来,DLL是默认不带注释的。即你生成一个DLL,给另一个项目引用,使用时看不到原有的注释。 二、解决方案 那如何将原有注释显示出来?可以在项目属性-生成-输出 阅读全文
posted @ 2021-12-17 16:09 唐宋元明清2188 阅读(321) 评论(2) 推荐(1) 编辑
摘要: WPF中全屏窗口,会自动隐藏任务栏。 那非全屏窗口如何隐藏任务栏?甚至有没有一种场景,隐藏任务栏后自定义一套系统任务栏来显示? 以下会分阶段讲述一些概念,任务栏、查找窗口、控制窗口显示。 1. 主屏任务栏 任务栏,其实也是一个窗口,主屏的任务栏名称是"Shell_TrayWnd"。 所以可以通过名称 阅读全文
posted @ 2021-10-01 22:26 唐宋元明清2188 阅读(948) 评论(0) 推荐(4) 编辑
摘要: WPF窗口设置属性ResizeMode="NoResize"时,回到桌面后,点击任意应用,都会将此窗口激活。 我们来看下详细操作: 1. WPF窗口设置属性ResizeMode 2. 启动测试程序,显示窗口 3. 在任务栏的右键菜单中,点击显示桌面(也可以使用快捷键win+D,回到桌面) 4. 点击 阅读全文
posted @ 2021-09-30 09:15 唐宋元明清2188 阅读(686) 评论(0) 推荐(3) 编辑