随笔分类 - .NET
摘要:在Ubutu+wine8.4环境下运行希沃白板5,汉字卡无法正常显示: 这个模块是我在前东家参与开发的模块,过了5年还有点印象。 大概原理是获取字体库中字符的笔画路径GraphicsPath,根据里面的路径点集PathPoints,通过PathGeometry转化为Path,填充好颜色就可以放到界面
阅读全文
摘要:闭包、弱引用的简单概念,大佬们描述的很多,有不了解的可以看看: 理解C#中的闭包 - 黑洞视界 - 博客园 (cnblogs.com) C#弱引用(WeakReference) - 简书 (jianshu.com) 组里小伙伴报了个BUG,定义的封装事件DeviceDown不生效了 瞅了下,貌似没啥
阅读全文
摘要:我们都知道路由事件,而附加路由事件用的比较少。 但如果是通用的场景,类似附加属性,附加事件就很有必要的。 举个例子,输入设备有很多种,WPF中输入事件主要分为鼠标、触摸、触笔:WPF 屏幕点击的设备类型 - 唐宋元明清2188 - 博客园 (cnblogs.com) 有这么多输入事件Mouse、To
阅读全文
摘要:今天看书,上面介绍implicit和explicit相对冷门,用的较少。 这个implicit类型虽然冷门,但真的很有用。我在自己的项目里就用了这个 上Demo, 1 public partial class MainWindow : Window 2 { 3 public MainWindow()
阅读全文
摘要:问题描述 我这里有个进程间通信组件,用于提供多应用间通信的解决方案。 进程间通信,分为客户端和服务端,俩端肯定会有些共性代码,所以加了个H3C.Channel.Core项目 因为之前还不太了解nuget这块,然后我就踩到了坑: 引用H3C.Channel.Client包后,H3C.Channel.C
阅读全文
摘要:笔迹擦除是白板软件的核心功能,擦除是以固定形状对笔迹进行碰撞测试,如有相关则分割Stroke线条。 擦除区域与橡皮大小不一致 测试反馈,擦除区域与真实的橡皮大小不一致: 上图中,橡皮显示是圆形的,但擦除效果是一个“8边形”区域。 找了一台8K屏,确实是能复现的: 看到这个诡异的8边形,一开始我是以为
阅读全文
摘要:控制台应用,程序的主线程是工作线程(MTA)。 所以如果在控制台应用中,弹出窗口,需要额外创建STA线程,如下所示: 另外,通过调试我们看到,控制台主线程跑完后,其实就销毁掉了。 如果是WPF应用程序,主线程是UI线程,从App的初始化位置可以看到,Main函数标记了STA线程的特性标签。如下图:
阅读全文
摘要:获取系统已安装的.NET版本,来确定当前应用可运行的环境。 微软已经有相应的完整文档,请参考:确定已安装的 .NET Framework 版本 - .NET Framework | Microsoft Docs Release根据文档描述是版本密钥,应该是类似版本构建号,能够判断是否已安装.NET。
阅读全文
摘要:关于锁,我们经常会使用lock object对象,进行资源访问的限制。 但,lock是有限制的,无法添加异步方法。编译器会报错。 下面推荐另一个类SemaphoreSlim,这是信号量的一个使用类。先看下面的使用: 1 private async void MainWindow_Loaded(obj
阅读全文
摘要:如果界面点击时,不想让窗口激活,可以按如下操作: 1 public MainWindow() 2 { 3 InitializeComponent(); 4 SourceInitialized += OnSourceInitialized; 5 } 6 private void OnSourceIni
阅读全文
摘要:如何获取当前窗口层级上方的所有窗口信息 User32有函数GetWindow function (winuser.h) - Win32 apps | Microsoft Docs,可以根据已知窗口句柄,获取指定类型的窗口。 1 [DllImport("user32.dll", SetLastErro
阅读全文
摘要:本章介绍如何通过句柄,截取指定窗口内容,以及截取失败的场景 一、根据窗口句柄获取窗口截图 先创建一个测试窗口程序A,显示如下: 同时我们把此窗口的句柄显示到一个文本输入框内。 1 TestBox.Text = new WindowInteropHelper(this).Handle.ToString
阅读全文
摘要:一、问题描述 在下面的截图中,我们发现,源码有添加一段注释。 然后通过Nuget包引用,在VS中用Reshaper反编译时,发现没有注释: 原来,DLL是默认不带注释的。即你生成一个DLL,给另一个项目引用,使用时看不到原有的注释。 二、解决方案 那如何将原有注释显示出来?可以在项目属性-生成-输出
阅读全文
摘要:WPF中全屏窗口,会自动隐藏任务栏。 那非全屏窗口如何隐藏任务栏?甚至有没有一种场景,隐藏任务栏后自定义一套系统任务栏来显示? 以下会分阶段讲述一些概念,任务栏、查找窗口、控制窗口显示。 1. 主屏任务栏 任务栏,其实也是一个窗口,主屏的任务栏名称是"Shell_TrayWnd"。 所以可以通过名称
阅读全文
摘要:reshaper是个好工具,能帮助我们提升开发效率,比如本文要介绍的全局代码清理功能。 如果你的VS安装了reshaper,可以通过Ctrl+E+C快捷键打开代码清理窗口。 代码清理,可以格式化多种文件内的内容、优化using引用、优化各种冗余代码等。 如果你觉得以上功能太多,可以复制一个,然后自定
阅读全文
摘要:本文介绍对列表进行创建及赋值的反射操作 我们现在有TestA、TestB类,TestA中有TestB类型列表的属性List,如下: 1 public class TestA 2 { 3 public List<TestB> List { get; set; } 4 } 5 public class
阅读全文
摘要:在C盘创建、移动文件,如果当前不是管理员身份,是没办法直接操作。 如果当前程序有管理员权限,那可以直接操作。 但是,添加管理员权限启动,会弹出用户确认提示框。 在某些场景下,其实是不想让用户看到这样的确认框,会影响用户体验。本文来讲下如何获取权限默默的对C盘进行操作~ 对文件/文件夹添加权限控制 我
阅读全文
摘要:1、鼠标 可以通过Mouse相关的事件参数MouseButtonEventArgs中的数据,e.StylusDecice==null表示没有触摸设备,所以设备为鼠标 2、触笔 or 触摸 根据StylusDown事件参数StylusDownEventArgs, e.StylusDevice.Tabl
阅读全文
摘要:Button的MouseDown事件 WPF的Button控件,鼠标点击时,MouseDown事件没有触发。 经确认,Button的MouseDown被内部处理了。下面是基类ButtonBase的部分代码: Mouse的其它事件也是如此: 官网的说明: 所以,MouseDown、MouseUp、Mo
阅读全文
摘要:系统有很多光标类型 :Cursors 类 (System.Windows.Input) | Microsoft Docs 本章介绍如何自定义光标、并动态切换光标类型。 动态切换光标类型 以白板书写为例:鼠标操作时,Cursor为红点;触摸时,Cursor为空; 1 public MainWindow
阅读全文

浙公网安备 33010602011771号