2023-06-12 17:31:36
勇哥今天用vs团队资源管理器“同步”时出现一个不一样的错误。错误如下:vs的输出窗口报告的完整信息如下:已在存储库 D:\xxxx 中本地创建提交 e76d4178
Remote: Enumerating objects: 43, done.
Remote: Counting objects: 2% (1/43)
Remote: Counting obje...
2023-03-24 09:32:41
勇哥注:此控件是继承TreeView控件重写的用户组件,主要特点是可以在节点文本右边添加按钮。按钮本身就是一个Button类,可以设置按钮的显示相关的属性,以及事件等。此控件可以方便提供IO、气缸、轴的测试功能,不用双击弹出另一个窗口做这些事。有效的提升了用户体验。使用方法说明:(1)此控件带一个WpfTreeHelper类,以方便操作控件(2)初始化树时,无论是根结点,还是子节点,都使用AddN...
2023-03-13 17:23:44
这篇文章是关于.Net的反射优化(有效率地使用反射)的技术。文中有翻译不准确、难以理解的内容可在评论出指点或咨询。概述反射(Reflection)是一种非常强大的.Net平台的特性。System.Reflection命名空间下提供了一套丰富的加载和调用程序集和对象的接口,除此之外它还提供了 了运行时动态地检索元数据信息的方法,比如获取属性、字段信息,特性信息等。使用反射确实可以使开发人员的生活变得...
2023-02-28 14:40:41
勇哥注:今天突然发现强制类型转换和as还是有点区别的。比如下面这句会抛异常:其中SACItemRunStatusEnum是一个枚举。ItemRunStatus= (Tuple<SACItemRunStatusEnum, int>)data异常信息如下:无法将类型为
“System.Tuple`2[Samsun.Domain.MotionCard.Common.SACItemRunSt...
2023-02-21 19:23:50
本文提供了一些性能优化的建议,这些经验来自于使用托管代码重写C# 和 VB编译器,并以编写C# 编译器中的一些真实场景作为例子来展示这些优化经验。.NET 平台开发应用程序具有极高的生产力。.NET 平台上强大安全的编程语言以及丰富的类库,使得开发应用变得卓有成效。但是能力越大责任越大。我们应该使用.NET框架的强大能力,但同时如果我们需要处理大量的数据比如文件或者数据库也需要准备对我们的代码进行...
2023-02-09 11:25:29
勇哥注:C#序列化与反序列化是大家用得非常多的功能。它可以保存C#中的对象,并且可以读回来。但是请注意如果对象中有下面的一些数据结构,它是无法保存或者读取的。(1)接口例如下面的接口ICard, 此时保存是可以的,只是读取时直接报错。public Dictionary<string, ICard> _CardObjectList = new Dictionary<string,...
2023-01-13 09:00:58
勇哥注:对于软件开发时UI交互方面做得好不好,可由下面原则进自查尼尔森十大原则由毕业于哥本哈根的人机交互学博士Jakob Nielsen发表,Jakob Nielsen对人机交互有很多研究,他提出十大可用性原则,用来评价用户体验的好坏,每个产品设计者都可以根据这十大原则进行自查。(1)系统可见性原则(Visibility of system status)保持界面的状态可见,变化可见,内容可见。让...
2022-11-30 08:32:08
问题:一个第三方的dll,调用它的函数会引起程序崩溃,但是try却无法捕捉到此异常。因为没有Try到异常,那么一个未处理的异常,会导致整个进程终止。这就是程序会崩溃的原因。这个问题,可以参考微软的一篇说明:CLR 完全介绍: 处理损坏状态异常http://msdn.microsoft.com/zh-cn/magazine/dd419661.aspx 勇哥的理解是: 某些第三方的dll不受管理,C#...
2022-11-29 20:22:24
勇哥注:微软的.net framework的ui框架有两种框架,一个是winform, 一个是wpf,前者主要特点是事件驱动,后者主要特点是数据驱动。由于wpf在.net core中也是被支持的,并且由于.net core在以后在跨平台的(如手机、平板端)工业软件开发中是主角,我们就可实现鱼和熊掌兼得,即享受wpf也享受.net core。同时,也是为了我们程序员的饭碗长期能端得住,努力持续的把新...
2022-11-26 18:55:04
勇哥安装vs2019时的报错如下:我的系统是win10企业版,但是仍然报windows不支持此产品。官方说明,需要win10内部版本号要高于下面的版本:WIN10的版本至少要在1703或者更高,你系统的版本应该比较低。https://docs.microsoft.com/zh-cn/visualstudio/releases/2019/system-requirements 通过ver指令查看内部...
2022-11-25 09:45:32
勇哥直接说答案:DockRightPortion这个属性的含义是:右侧停靠窗体在固定停靠状态下,窗体宽度占停靠面板(DockPanel)的比例。DockRightPortion这个属性的含义是:左侧停靠窗体在固定停靠状态下,窗体宽度占停靠面板(DockPanel)的比例。既然是比率,就是取值0--1,不要填写像素数量。如果你希望用像素数量来计算这个比率,可以这样:mainForm.DockPane...
2022-11-24 20:41:21
勇哥注:当初勇哥使用这段代码是为了启用双缓冲,避免窗口控件过多引起重绘过慢闪烁。因为是引用别人的代码,并不知道它是啥意思。而且时至今天,还发现其有副作用。先来谈谈它的作用窗体和控件的属性CreateParams,通过它你能够很方便的控制窗体或控件诸如边框、最大化、最小化关闭,按钮的隐藏、窗体的模式化,弹窗模式等的一些特性。如: 让窗体的关闭按钮不可用。虽然通过ControlBox 也可让,最大,最...
2022-11-23 08:17:27
窗口以击键消息和字符消息的形式接收键盘输入。附加到窗口的消息循环必须包含将击键消息转换为相应字符消息的代码。如果窗口在其客户区显示键盘输入,它应该创建并显示一个插入符号以指示将输入下一个字符的位置。当用户在键盘上键入时,具有键盘焦点的窗口的窗口过程接收按键消息。击键消息是WM_KEYDOWN、WM_KEYUP、WM_SYSKEYDOWN和WM_SYSKEYUP。典型的窗口过程会忽略除WM_KEYD...
2022-11-20 17:29:11
勇哥注:在下面的winfrom中,调用了netMarketing类库的appContainer容器控件把记事本程序嵌入进来。(appContainer容器控件见 http://www.skcircle.com/?id=1930 ) 这个时候,我们如何得到这个记事本编辑区的窗体句柄呢?通过Spy++分析,这个窗体的全部子窗体层级构造如下图所示:(句柄为 0040B84的窗体就是程序主窗体)从中我们发...
2022-11-19 23:14:13
C#对Windows窗口或窗口句柄的操作,都是通过 Win32 API 实现的,通过DllImport引入Windows API操作窗口(句柄),可以实现枚举已打开的窗口、向窗口或子窗口(窗口内的控件)发送文本、关闭、键盘按键等各种命令,实现窗口的基本操作。新建Windows帮助类public class WndHelper{},提供窗口相关的操作,并添加引用using System.Runtim...
2022-11-19 21:25:39
模拟按键在.Net中有三种方式实现。第一种方式:System.Windows.Forms.SendKeys 组合键:Ctrl = ^ 、Shift = + 、Alt = %模拟按键:A private void button1_Click(object sender, EventArgs e)
{
textBox1.Focus();...
2022-11-18 14:20:42
第三方的增强型树型控件Aga.Controls是勇哥常用的控件。由于其使用方法常用常忘,这里记录一下以备察。Aga.Controls的扩展能力如下: 自带勾选与图标,图标是可以更换的。 子节点可以拖放换位置,子节点可以拖放成根结点 根点与子结点都可以更名常见的需求主要是要判定节点是根还是子节点,同一级节点有多少等等。演示代码,读树节点全部的信息: /// <summary>...
2022-11-16 14:05:45
如下图所示:右边的列表会自动选中和左边名字相似的项目。注意,只要相似度高即可,并非要完全一致,这一点真是神奇。此功能对于书写对象属性赋值,真是尤如神助。VS号称宇宙最强代码编辑器,真不是吹的~~~~--------------------- 作者:hackpig来源:www.skcircle.com版权声明:本文为博主原创文章,转载请附上博文链接!...
2022-11-11 22:18:57
简介: C#多线程(17):小总结前言本篇内容是小总结和过渡,看完这篇后,就要开始继续学习 C# 多线程中的知识点啦~。前面,经过 16 篇的学习,我们学习了多线程、锁、线程池、任务、同步、异步等知识,还没有使用到 async、await 这些关键字。有同学问,现在随便拉一个开源项目,里面几乎都是 async/await 这些组成;使用了 async/await ,结果比不用更加耗性能了;ASP....
2022-11-11 21:58:07
简介: C#多线程系列(3):原子操作知识点竞争条件当两个或两个以上的线程访问共享数据,并且尝试同时改变它时,就发生争用的情况。它们所依赖的那部分共享数据,叫做竞争条件。数据争用是竞争条件中的一种,出现竞争条件可能会导致内存(数据)损坏或者出现不确定性的行为。线程同步如果有 N 个线程都会执行某个操作,当一个线程正在执行这个操作时,其它线程都必须依次等待,这就是线程同步。多线程环境下出现竞争条件,...
2022-11-11 21:56:43
简介: C#多线程(4):进程同步Mutex类Mutex 类Mutex 中文为互斥,Mutex 类叫做互斥锁。它还可用于进程间同步的同步基元。Mutex 跟 lock 相似,但是 Mutex 支持多个进程。Mutex 大约比 lock 慢 20 倍。互斥锁(Mutex),用于多线程中防止两条线程同时对一个公共资源进行读写的机制。Windows 操作系统中,Mutex 同步对象有两个状态:signa...
2022-11-11 21:53:05
简介: C#多线程(5):资源池限制Semaphore、SemaphoreSlim 类两者都可以限制同时访问某一资源或资源池的线程数。这里先不扯理论,我们从案例入手,通过示例代码,慢慢深入了解。Semaphore 类这里,先列出 Semaphore 类常用的 API。其构造函数如下:构造函数说明Semaphore(Int32, Int32)初始化 Semaphore 类的新实例,并指定初始入口数和...
2022-11-11 21:51:20
简介: C#多线程(7):手动线程通知区别与示例AutoResetEvent 和 ManualResetEvent 十分相似。两者之间的区别,在于前者是自动(Auto),后者是手动(Manua)。你可以先运行下面的示例,再测试两者的区别。AutoResetEvent 示例:class Program
{
// 线程通知
private static A...
2022-11-11 21:45:14
简介: C#多线程(6):线程通知AutoRestEvent 类用于从一个线程向另一个线程发送通知。微软文档是这样介绍的:表示线程同步事件在一个等待线程释放后收到信号时自动重置。其构造函数只有一个:构造函数里面的参数用于设置信号状态。构造函数说明AutoResetEvent(Boolean)用一个指示是否将初始状态设置为终止的布尔值初始化 AutoResetEvent 类的新实例。真糟糕的机器翻译...
2022-11-11 21:40:50
简介: C#多线程(8):线程完成数解决一个问题假如,程序需要向一个 Web 发送 5 次请求,受网路波动影响,有一定几率请求失败。如果失败了,就需要重试。示例代码如下:class Program
{
private static int count = 0;
static void Main(string[] args)
{...
2022-11-11 21:38:07
引用自: https://developer.aliyun.com/article/906607 简介: C#多线程(9):多阶段并行线程前言这一篇,我们将学习用于实现并行任务、使得多个线程有序同步完成多个阶段的任务。应用场景主要是控制 N 个线程(可随时增加或减少执行的线程),使得多线程在能够在 M 个阶段中保持同步。线程工作情况如下:我们接下来 将学习C# 中的 Barrier ,用于实现并行...
2022-11-11 21:34:42
引用一篇文章:https://developer.aliyun.com/article/907006 ReaderWriterLockSlimReaderWriterLock 类:定义支持单个写线程和多个读线程的锁。ReaderWriterLockSlim 类:表示用于管理资源访问的锁定状态,可实现多线程读取或进行独占式写入访问。两者的 API 十分接近,而且 ReaderWriterLockSl...
2022-11-11 20:02:32
勇哥注:我们继续上一篇《C# 勇哥关于多线程读写plc内存的研究续,引用ReaderWriterLockSlim锁带来的读操作并发的问题》此系列贴子已经写了好几篇了:(4)C# 勇哥关于多线程读写plc内存的研究续,引用ReaderWriterLockSlim锁带来的读操作并发的问题http://www.skcircle.com/?id=1995(3)C# 勇哥关于多线程读写plc内存的研究续,解...
2022-11-10 14:55:10
勇哥注:不可变对象集合类由于其特性,天生就是线程安全的,多线程同时读写都没得问题。它一共有下面这些:ImmutableArray<T>ImmutableStack<T>ImmutableQueue<T>ImmutableList<T>ImmutableHashSet<T>ImmutableSortedSet<T>Immutab...
2022-11-10 11:32:41
MS在Nuget上发布了一个Immutable Collection的程序集,提供了对不可变对象的集合的支持。简单的看了一下,貌似支持的还比较全:ImmutableArray<T>ImmutableStack<T>ImmutableQueue<T>ImmutableList<T>ImmutableHashSet<T>ImmutableSo...