C#
文章平均质量分 59
君子居易
“正已而不求于人,则无怨,上不怨天,下不尤人,故君子居易以俟命,小人行险以徼幸。”
展开
-
C# – 正确锁定列表在多线程场景中
正确锁定列表在多线程场景中翻译 2022-08-06 10:28:16 · 1161 阅读 · 0 评论 -
C# 中的同步、异步和多线程
异步中的队列执行和并发执行翻译 2022-08-06 09:42:15 · 1191 阅读 · 0 评论 -
深入了解 WPF Dispatcher 的工作原理(Invoke/InvokeAsync 部分)
深耕 WPF 开发的各位程序员大大们一定避不开使用 Dispatcher。跨线程访问 UI 当然免不了用到它,将某个任务延迟到当前任务之后执行也会用到它。Dispatcher.Invoke、Dispatcher.BeginInvoke 是过去大家经常使用的方法,而 .NET Framework 4.5 中微软为我们带来了 Dispatcher.InvokeAsync 方法,它和前面两个有何不同?...转载 2022-07-20 14:54:07 · 1842 阅读 · 0 评论 -
Task.Run 和 Task.Factory.StartNew 之间的区别
在本文中,我们了解了Task.Run和Task.Factory.StartNew之间的区别。我们已经讨论了一些高级用例,哪些StartNew是可行的选择,否则Task.Run通常是推荐的方法。翻译 2022-07-19 10:05:32 · 3031 阅读 · 0 评论 -
删除async void
我再说一遍:async await很棒。与每个伟大的工具一样,我们有责任了解如何最好地使用它。翻译 2022-07-13 16:36:22 · 132 阅读 · 0 评论 -
Thread.Sleep 是程序设计不佳的标志。
这是有缺陷的逻辑,因为应用程序仍然不能与Thread.Sleep 一起工作。这实际上只是解决了特定计算机上的问题。最初的问题可能是时间/同步问题,通过使用 Thread.Sleep 隐藏它来忽略它只会延迟问题并使其以随机、难以重现的方式发生。...翻译 2022-07-13 15:39:53 · 998 阅读 · 0 评论 -
异步编程:异步 MVVM 应用程序的模式:数据绑定
当代码库从同步转换为异步时,通常服务或数据访问组件首先发生变化,然后异步从那里向 UI 增长。完成几次后,将方法从同步转换为异步就变得相当简单了。我期望(并希望)这种翻译将被未来的工具自动化。但是,当异步访问 UI 时,就需要进行真正的更改。...翻译 2022-07-13 09:25:40 · 444 阅读 · 0 评论 -
异步 OOP 2:构造函数
异步构造提出了一个有趣的问题。能够await在构造函数中使用会很有用,但这意味着构造函数必须返回一个Task表示将来构造的值,而不是构造值。这种概念很难融入现有的语言。底线是async不允许使用构造函数,所以让我们探索一些替代方案。...翻译 2022-07-12 19:34:43 · 293 阅读 · 0 评论 -
DESCryptoServiceProvider 类加密解密
定义一个包装对象来访问加密服务提供程序 (CSP) 版本的数据加密标准 (DES) 算法。 此类不能被继承。转载 2022-07-04 19:58:54 · 875 阅读 · 0 评论 -
.NET 5 编码GB2312使用方法
.NET 5中使用编码GB2312原创 2022-07-04 16:56:25 · 549 阅读 · 0 评论 -
WPF 监听系统休眠 唤醒 以及插拔电源状态
监视系统状态原创 2022-06-01 19:51:24 · 366 阅读 · 0 评论 -
如何混淆.NET 程序集与 ConfuserEx
包含托管代码的软件程序集(例如 .NET 应用程序使用的程序集)可以使用免费的反编译工具轻松反编译成可读的源代码。这可能会给那些希望防止由于版权或潜在安全问题而查看或更改其代码的应用程序供应商带来挑战。对于部署到客户端设备的任何应用程序,无法保证完全防止查看或篡改代码。但是,通过使用混淆工具,例如 ConfuserEx,您可以显着提高反编译应用程序的难度。在本文中,我将介绍如何使用 ConfuserEx 为部署到客户端的 .NET 程序集添加一层保护。混淆设施...翻译 2022-05-11 14:28:09 · 1047 阅读 · 0 评论 -
c# wmi 中ManagementObjectSearcher使用中的 CPU高的问题
问题:在程序中通过ManagementObjectSearcher类来获取当前串口状态,但是由于用的是定时器,每秒获取一次,从而导致wmi服务占用的CPU高解决方案:避免高频率调用ManagementObjectSearcher对象原创 2022-04-28 16:40:19 · 395 阅读 · 0 评论 -
WMI和ManagementObjectSearcher一些使用
ManagementObjectSearcher使用// 硬件Win32_Processor, // CPU 处理器Win32_PhysicalMemory, // 物理内存条Win32_Keyboard, // 键盘Win32_PointingDevice, // 点输入设备,包括鼠标。Win32_FloppyDrive, // 软盘驱动器Win32_DiskDrive, // 硬盘驱动器Win32_CDROMDrive, // 光盘驱动器Win32_BaseBoard, // 主板转载 2022-04-28 16:33:56 · 294 阅读 · 0 评论 -
ManagementObjectSearcher 对象获取串口列表
首先,需引用using System.Management;可先建个枚举类,如下#region WIN32 API/// <summary>/// 枚举win32 api/// </summary>public enum HardwareEnum{// 硬件Win32_Processor, // CPU 处理器Win32_PhysicalMemory, // 物理内存条Win32_Keyboard, // 键盘Win32_PointingDevice,转载 2022-01-21 13:50:10 · 615 阅读 · 0 评论 -
使用 Dll Invoke,重新分配内存资源
public class MemoryManagement{[DllImportAttribute("kernel32.dll", EntryPoint = "SetProcessWorkingSetSize", ExactSpelling = true, CharSet =CharSet.Ansi, SetLastError = true)]private static extern int SetProcessWorkingSetSize(IntPtr process, int minimu.翻译 2022-01-13 10:03:11 · 209 阅读 · 0 评论 -
WPF 关闭平板电脑WIN10系统小键盘
[DllImport("user32.dll")]public static extern int FindWindow(string lpClassName,string lpWindowName); [DllImport("user32.dll")]public static extern int SendMessage(int hWnd,uint Msg,int wParam,int lParam); public const int WM_SYSCOMMAND = 0x0112;pu.转载 2021-12-27 11:27:32 · 312 阅读 · 0 评论 -
WPF软件导致Win10系统的平板电脑小键盘自动隐藏问题
软件设置这个会导致系统键盘xian'shiInputMethod.SetIsInputMethodEnabled(AssociatedObject, true);原创 2021-11-23 19:34:06 · 453 阅读 · 1 评论 -
今天给大家介绍一个开源.net混淆器——ConfuserEx
.net 代码混淆转载 2021-11-17 09:26:47 · 1103 阅读 · 0 评论 -
SQLite EF6 InvalidOperationException: The class ‘H.UserInfoEntity‘ has no parameterless constructor
H.UserInfoEntity 类并确保它具有默认的公共构造函数UserInfoEntity缺少公共构造函数解决方案在UserInfoEntity类中添加无参构造函数即可PublicUserInfoEntity(){}原创 2021-11-16 11:33:23 · 293 阅读 · 0 评论 -
BitConverter Class-主要用于Byte类型转换
定义命名空间:系统集会:系统运行时文件将基本数据类型转换为字节数组,将字节数组转换为基本数据类型。C#复制public static class BitConverter遗产目的位转换器例子下面的代码示例说明了几个BitConverter类方法的使用。// Example of BitConverter class methods.using System;class BitConverterDemo{ publi翻译 2021-08-19 09:47:03 · 573 阅读 · 0 评论 -
CreateProcessAsUser
该CreateProcessAsUser函数创建一个新的进程及其主线程。新进程然后执行指定的可执行文件。该CreateProcessAsUser功能类似的CreateProcess函数,除了新进程运行在由hToken参数表示的用户的安全上下文中。默认情况下,新进程是非交互式的,即它运行在不可见且无法接收用户输入的桌面上。此外,默认情况下,新进程继承调用进程的环境,而不是与指定用户关联的环境。BOOL CreateProcessAsUser(HANDLEhToken, // 处理代表..翻译 2021-07-23 17:19:09 · 7518 阅读 · 1 评论 -
在 WPF 中使用 BitmapImage 类时,要注意内存占用可能会持续走高的一个问题
如果通过 BitmapImage 类不断的打开图片文件(在窗口中加载很多图片,尤其是大体积图片的话),会使 WPF 程序的内存占用持续走高,直到内存耗尽报出异常。通过内存跟踪查看,占用过多的都是 Unmanaged 部分,并不是 .net 对象。暂时还没有探索到具体原因,目前看到一个比较有效的方法就是在加载图片完成后调用 BitmapImage 对象的 Freeze 方法,虽然一开始内存仍然会持续走高但是在内存即将耗尽或下次内存回收时,会根据情况释放之前占用的过多内存,不会一直持续走高直到耗转载 2021-07-23 09:07:31 · 1656 阅读 · 0 评论 -
c#通过创建Windows服务启动程序
1. 新建一个Windows服务应用程序 创建项目——》Visual C# 左侧的"+"——》Windows ——》Windows 服务(右侧模板)——》输入名称,确定创建项目2. 设置Windows服务的属性(Windows服务里没有窗体,所以点击左侧设计器里空白的地方即可在右侧属性栏里看到属性) 这里属性是控制服务器是否可以停止,暂停,继续等等的操作。根据需要选择。属性的名字已经很明白了,不需要再做太多解释。我是把 CanPauseAndContinue 和 CanShutD...转载 2021-07-20 18:35:03 · 1114 阅读 · 0 评论 -
解决vista和win10在windows服务中交互桌面权限问题:穿透Session 0 隔离
服务(Service)对于大家来说一定不会陌生,它是Windows 操作系统重要的组成部分。我们可以把服务想像成一种特殊的应用程序,它随系统的“开启~关闭”而“开始~停止”其工作内容,在这期间无需任何用户参与。 Windows 服务在后台执行着各种各样任务,支持着我们日常的桌面操作。有时候可能需要服务与用户进行信息或界面交互操作,这种方式在XP 时代是没有问题的,但自从Vista 开始你会发现这种方式似乎已不起作用。Session 0隔离实验 下面来做一个名叫...转载 2021-07-20 18:28:53 · 1540 阅读 · 2 评论 -
DispatcherTimer源码
using System; using System.Threading;using System.Windows;using System.Diagnostics;using System.Collections.Generic; namespace System.Windows.Threading { /// <summary> /// A timer that is integrated into the Dispatcher queues, a.原创 2021-06-25 17:29:09 · 135 阅读 · 0 评论 -
C#生成随机数的三种方法
随机数的定义为:产生的所有数字毫无关系.在实际应用中很多地方会用到随机数,比如需要生成唯一的订单号.在C#中获取随机数有三种方法:一.Random 类Random类默认的无参构造函数可以根据当前系统时钟为种子,进行一系列算法得出要求范围内的伪随机数. 1 2 Random rd =newRandom(); inti = rd.Next(); 这种随机数可以达到一些要求较低的目标,但是如果在高并发的情况下,Random类所...转载 2021-06-17 14:43:30 · 28822 阅读 · 0 评论 -
串口编程DCB结构体参数配置详细说明
序号 字段 释义 1 DWORD DCBlength.: sizeof(DCB) 2 DWORD BaudRate; current baud rale指定当前的波特率 3 DWORD fBinary:1 binary mode, no EOF check指定是否允...转载 2021-06-11 16:55:57 · 1165 阅读 · 0 评论 -
C# 监听windows系统消息
1、用于监听Windows消息HwndSource hwndSource = PresentationSource.FromVisual(this) as HwndSource;//窗口过程if (hwndSource != null)hwndSource.AddHook(new HwndSourceHook(DeveiceChanged)); //挂钩2、勾子函数public const int WM_DEVICECHANG...转载 2021-06-11 14:08:22 · 1419 阅读 · 0 评论 -
WPF中的焦点
WPF中的焦点分两种:键盘焦点和逻辑焦点。很多人刚开始不理解,为什么有两个焦点?这两个焦点有什么区别?我应该用哪个?今天就来讲解一下WPF中的焦点。嗯,看到常见应用那里你就会豁然开朗的。一、结论先说结论:键盘焦点是真焦点,逻辑焦点是假焦点。我们理解的获得焦点是指:一个控件获得焦点后,将处于活动状态。键盘焦点就是我们通常说的真焦点,当控件获得键盘焦点后,将处于活动状态。但控件获得逻辑焦点时,并不能保证处于活动状态。二、概念1.键盘焦点键盘焦点就是我们常识中的焦点。当一个控件获得转载 2021-03-16 11:28:12 · 1203 阅读 · 0 评论 -
WPF的XAML中特殊字符的转义代码
字符 转义字符 & & > > < < " " ’ ' { {}{ 回车 
或者 换行 
或者 Tab 	或者	 空格  或者  ...转载 2021-03-16 11:26:26 · 1431 阅读 · 0 评论 -
ObservableCollection多个非UI线程访问的方法
WPF 应用程序可以使用ItemsControl或它的一个子类(ListBox、DataGrid、TreeView、等ListView)来显示数据的集合。WPF 通过的子类对集合中的所有访问权限进行通道CollectionView。和都与在ItemsControlCollectionView其上创建了的线程关联ItemsControl,这意味着将禁止在不同的线程上使用它们,并引发异常。实际上,此限制也适用于集合。可能需要在多个线程上使用集合。例如,你希望在 "数据收集"...转载 2021-01-27 10:39:39 · 971 阅读 · 0 评论 -
两个int的数相除,会自动取整,不会四舍五入方式取整
两个整型的数相除,会自动取整。如果要四舍五入,就要首先转换成Double型,然后利用Math.Round四舍五入。具体代码如下Double avg = Math.Round((Double)a / b, 2);如果想向上取整Double avg = Math.Cell((Double)a / b, 2);如果想向下取整Double avg = Math.Floor((Double)a / b, 2);...原创 2021-01-20 09:45:50 · 3759 阅读 · 0 评论 -
C# 使用 AsyncEx 库的 AsyncLock 异步锁
这async几乎是lock关键字或Mutex类型的等效变量,类似于Stephen Toub的AsyncLock。它几乎是等效的,因为该lock关键字允许重新输入,而async-ready锁目前无法实现。一种AsyncLock是采取或不。可以通过调用异步获取该锁LockAsync,并通过处理该任务的结果将其释放。AsyncLock可选CancellationToken,可以用来取消获取锁。返回的任务在获取时LockAsync将进入Completed状态AsyncLock。Canceled如果Cance翻译 2021-01-18 09:43:27 · 3405 阅读 · 0 评论 -
NET/C#程序开发中如何更优美地实现失败任务重试的逻辑?
背景在.NET中,异常是指成员没有完成它的名称宣称可以完成的行动。在异常的机制中,异常和某件事情的发生频率无关。有时候需要对一些失败的任务进行多次的重试,如果重试的次数达到我们设定的阀值,则再放弃任务。解决方案使用一个静态类和静态的泛型方法来处理,创建通用的任务重试机制,我们可以使用Action作为参数。实现方法using BQoolCommon.Service.ExtensionMethod;using Newtonsoft.Json.Linq;using System;us.转载 2021-01-07 15:58:24 · 224 阅读 · 0 评论 -
WPF中WindowFormsHost始终置顶的有效解决方案
背景WPF的原生控件并不具备自身的句柄,即使使用偏门的方式获取的结果也都是控件所在窗体的句柄,并不代表该控件本身的资源,这是由WPF的自身的机制决定的。csharpIntPtr hwnd1 = new WindowInteropHelper(this).Handle; IntPtr hwnd2 = ((HwndSource)PresentationSource.FromVisual(uielement)).Handle;到此需要了解下Winform与WPF的区别,WPF和winform最转载 2020-11-03 09:50:27 · 3567 阅读 · 2 评论 -
VisualTreeUtils
using System; using System.Collections; using System.Diagnostics.CodeAnalysis; using System.Windows; using System.Windows.Media; using System.Windows.Media.Media3D; using System.Collections.Generic; // <summary> // .转载 2020-10-25 08:31:01 · 188 阅读 · 0 评论 -
C#利用FileSystemWatcher控件实现文件监控的方法
C#利用FileSystemWatcher控件实现文件监控的方法?这个问题可能是我们日常学习或工作经常见到的。希望通过这个问题能让你收获颇深。下面是小编给大家带来的参考内容,让我们一起来看看吧!FileSystemWatcher可以使用FileSystemWatcher组件监视文件系统,并对文件系统的改变作出反应。通过使用FileSystemWatcher组件,在特定的文件或目录被创建、修改或删除时,可以快速和便捷地启动业务流程。例如,如果一组用户在合作处理一个存储在服务器共享目录下的文档时,可转载 2020-09-14 22:42:09 · 477 阅读 · 0 评论 -
如何将PC中的本地文件路径转换为相对网络或UNC路径?
假设D:\myfolder本地路径与\\192.157.1.1\myfolder共享根据输入中不同类型的路径,调用Path.GetPathRoot以获取返回值string GetNetworkPath(string path){ string root = Path.GetPathRoot(path); // validate input, in your case you are expecting a path starting with a root of type "E:原创 2020-09-13 23:03:14 · 1341 阅读 · 0 评论 -
C# System.BadImageFormatException 解决方法
当动态链接库(.dll文件)或可执行文件(.exe文件)的文件格式不符合公共语言运行库期望的格式时,将引发此异常。特别是,在以下情况下会引发异常: .NET Framework实用程序的早期版本(例如ILDasm.exe或installutil.exe)与通过更高版本的.NET Framework开发的程序集一起使用。 若要解决此异常,请使用与用于开发程序集的.NET Framework版本相对应的工具版本。这可能需要修改Path环境变量或提供指向正确可执行文件的完全限定路径。 您试图加翻译 2020-09-01 14:30:29 · 5209 阅读 · 0 评论