摘要: 在错误的条件时,更改cell.Style.BackColor的背景颜色 /// <summary> /// 单元格字体颜色 /// </summary> Color cellForeColor = Color.Black; /// <summary> /// 单元格背景正常颜色 /// </summ 阅读全文
posted @ 2020-04-17 12:53 一只独行的猿 阅读(604) 评论(0) 推荐(0) 编辑
摘要: Timer可以对方法的执行时间进行调度,可以是经过指定的时间段后执行,也可以是在之后每隔一段时间执行一次。但不要创建太多的定时器。全部的Timer都是由线程池中的1个线程提供支持的。如果Timer的数量太多,则执行回调方法会被延迟。 在空闲时,Timer线程会执行线程池中的任务,Timer会由下一个 阅读全文
posted @ 2019-08-01 21:26 一只独行的猿 阅读(740) 评论(0) 推荐(0) 编辑
摘要: 进程之间的通信是为了解决不同进程之间的数据传输问题,这样可以让不同程序交互数据。实现进程通信的方式:1、剪切板;2、COM;3、内存映射文件;4、WCF 1、剪切板Clipboard在进程间传送对象 剪切板是一个供应用程序使用的公有区域。在.NET中定一个了一个DataFormats类,此类包含一些 阅读全文
posted @ 2019-08-01 21:10 一只独行的猿 阅读(2498) 评论(1) 推荐(1) 编辑
摘要: 在前面的《基于任务的异步编程模式(TAP)》文章中讲述了.net 4.5框架下的异步操作自我实现方式,实际上,在.net 4.5中部分类已实现了异步封装。如在.net 4.5中,Stream类加入了Async方法,所以基于流的通信方式都可以实现异步操作。 1、异步读取文件数据 public stat 阅读全文
posted @ 2019-07-16 21:08 一只独行的猿 阅读(890) 评论(3) 推荐(0) 编辑
摘要: 通过代码操作防火墙的方式有两种:一是代码操作修改注册表启用或关闭防火墙;二是直接操作防火墙对象来启用或关闭防火墙。不论哪一种方式,都需要使用管理员权限,所以操作前需要判断程序是否具有管理员权限。 1、判断程序是否拥有管理员权限 需要引用命名空间:System.Security.Principal 2 阅读全文
posted @ 2019-07-11 23:45 一只独行的猿 阅读(2607) 评论(0) 推荐(1) 编辑
摘要: 对于某些程序,我们只允许它使用某些特定端口、网络类型或者特定IP类型等信息。这时候,需要使用到防火墙里面的“高级设置”,创建某些特定的入站或者出栈规则,以规避其程序使用允许端口等意外的信息。 下面以创建出站规则为例,编写一条出站规则,规避除允许规则以外的通过防火墙。创建规则时,会使用到接口INetF 阅读全文
posted @ 2019-07-11 23:44 一只独行的猿 阅读(3215) 评论(0) 推荐(1) 编辑
摘要: 将特定程序加入防火墙组,与将特定端口加入防火墙流程类似。详情见“C# 防火墙操作之特定端口”。其主要代码为: 阅读全文
posted @ 2019-07-11 22:09 一只独行的猿 阅读(990) 评论(0) 推荐(1) 编辑
摘要: 针对将特定端口加入到windows系统的防火墙中,使其允许或禁止通过防火墙。其大概思路是: 删除规则比较简单:创建防火墙实例,直接移除某种通信类型的端口就行。 阅读全文
posted @ 2019-07-11 00:10 一只独行的猿 阅读(1797) 评论(0) 推荐(2) 编辑
摘要: 在Windows系统中,原有自带的字体样式有限,有时候我们的程序会使用到个别稀有或系统不自带的字体。因此我们需要将字体打包到程序中,当程序启动时,检测系统是否有该字体,如果没有则安装该字体,也可以动态加载字体。 1.1、使用代码安装字体 注意:安装字体时,需要windows的管理员权限。 [DllI 阅读全文
posted @ 2019-07-04 22:52 一只独行的猿 阅读(3177) 评论(4) 推荐(0) 编辑
摘要: 有时候,我们的程序需要启动一些子进程,如嵌入的图形程序。 当启动一个进程后,获得这个进程信息Process,然后其内部在某个时刻启动了一个子进程,这个时候就涉及程序域和进程树的概念。当我们通过非正常操作的方式结束前面获得的进程信息Process时(如Kill掉),可能并没有实际结束子进程。因为当有主 阅读全文
posted @ 2019-05-08 12:45 一只独行的猿 阅读(2527) 评论(0) 推荐(0) 编辑
摘要: Winform改变语言类型比较复杂,需要根据不同语言应用语言资源。而软件在进行语言切换时,需要将当前的UI文化线程引用对应的语言类型。常用的有三种方式,此处使用两种,对比发现其中的优缺点: 阅读全文
posted @ 2019-01-18 15:59 一只独行的猿 阅读(969) 评论(0) 推荐(0) 编辑
摘要: 使用第三方Steema的TeeChart控件,设置鼠标放在某一线条点上,显示某一点的数据标签问题(虚线型十字光标基准线,放在线上显示对应点的二维坐标轴数据数据),调用InitTeeChartTipTools方法即可: 阅读全文
posted @ 2019-01-18 15:53 一只独行的猿 阅读(1393) 评论(0) 推荐(0) 编辑
摘要: 在.net的异常机制中,有部分严重的编程错误(系统的某些Corrupted State Exceptions异常)是默认不被用户使用常规的异常捕捉方式捕捉到的。 微软的这种设计方式,是让用户必须处理该异常,否则程序将无法正常运行。目前发现两种情况,但解决方法通用。 1、AccessViolation 阅读全文
posted @ 2019-01-18 15:45 一只独行的猿 阅读(6302) 评论(1) 推荐(0) 编辑
摘要: C#的每一个类型都代表一种资源,而资源又分为两类: 托管资源 由CLR管理分配和释放的资源,即从CLR里new出来的对象。 非托管资源 不受CLR管理的对象,如Windows内核对象,或者文件、数据库连接、套接字、COM对象等。 如果类型用到了非托管资源,或者需要显式释放托管资源,那么需要让类型继承 阅读全文
posted @ 2018-08-26 10:38 一只独行的猿 阅读(1268) 评论(0) 推荐(0) 编辑
摘要: 任务表示某个工作单元。这个工作单元可以在单独的线程中运行,也可以同步方式启动一个任务,使主线程等待。任务可以在完成后定义一个连续工作,同时也可以有子任务(但取消父任务后,子任务也会被取消)。 1、启动任务 使用TaskFactory类或Task类的构造方法和Start()方法。启动任务时,会创建一个 阅读全文
posted @ 2018-08-21 22:05 一只独行的猿 阅读(240) 评论(0) 推荐(0) 编辑
摘要: Parallel类是对线程的抽象,提供数据与任务的并行性。类定义了静态方法For和ForEach,使用多个任务来完成多个作业。Parallel.For和Parallel.ForEach方法在每次迭代的时候调用相同的代码,而Parallel.Invoke()方法允许同时调用不同的方法。Parallel 阅读全文
posted @ 2018-07-23 21:14 一只独行的猿 阅读(2284) 评论(0) 推荐(3) 编辑
摘要: Mutex类、Event类、SemaphoreSlim类和ReaderWriterLockSlim类等提供了多个进程之间的线程同步。 1、WaitHandle 基类 WaitHandle抽象类,用于等待一个信号的设置。可以根据其派生类的不同,等待不同的信号。异步委托的BeginInvoke()方法返 阅读全文
posted @ 2018-07-16 21:20 一只独行的猿 阅读(676) 评论(0) 推荐(0) 编辑
摘要: 在线程里,如果需要共享数据,那么一定需要使用同步技术,确保一次只有一个线程访问和改变共享数据的状态。在.net中,lock语句、Interlocked类和Monitor类可用于进程内部的同步。 1、lock语句与线程安全 lock语句是设置锁定和解除锁定的一种简单方式。在使用lock语句之前,先进入 阅读全文
posted @ 2018-07-01 14:36 一只独行的猿 阅读(553) 评论(0) 推荐(0) 编辑
摘要: Thread类相对于线程池中的线程,使用者有更多的控制权。该类允许创建前台线程,设置线程优先级等。Thread类的构造函数重载为接受ThreadStart和ParameterizedThreadStart类型的委托参数。 1、给线程传递数据 给线程传递数据的两种方式: 1.使用带Parameteri 阅读全文
posted @ 2018-06-30 22:02 一只独行的猿 阅读(426) 评论(0) 推荐(0) 编辑
摘要: 线程的创建需要时间。如果存在多个任务需要完成,则可以事先创建许多线程,在应该完成任务时发出需求线程请求。线程数最好时动态的增加于减少。TheadPool类可以托管线程列表,这个类能动态增加于减少线程的线程数,直到最大线程数 可配置。在四核CPU中,默认为1023个工作线程和1000个I/O线程。也可 阅读全文
posted @ 2018-06-29 21:36 一只独行的猿 阅读(224) 评论(0) 推荐(0) 编辑