- 博客(41)
- 资源 (12)
- 收藏
- 关注
原创 Task 超时处理
我们只是延迟 5 秒来让 CancellationTokenSource 取消,虽然它被用到Task第二个参数里,且5秒后取消了,但是我们的工作耗时代码里用了。但是这样写会有一个问题,就是每次做超时都会写这段代码,可以考虑改为扩展方法。Task工作要支持被取消,首先是要在工作内容中使用支持取消的代码,例如。做了任务执行时间对比,如果工作任务晚于超时任务完成,即工作超时。只是管理取消任务的令牌,它本身是没有超时检测功能的。这种不支持取消的同步方法,是必须要等它执行完的。下面的代码,永远不会检测到超时。
2025-09-30 14:22:53
249
原创 使用 Setup Project 打包
1)在打包项目【Setup1】上右击,选择【view】-【用户界面】,会出现【Install】【Administrative Intall】。右击exe文件,创建快捷方式,并重命名,如 test.exe,再将该快捷方式拖到【User's Desktop】文件夹。在VS里新建项目,项目类型选择选【setup project】,项目取名如:Setup1,默认出现三个文件夹,2)选择【许可协议】,如果没有就右击【Start】-【添加对话框】-【许可协议】,将其拖到想要出现的位置,
2025-08-08 15:23:24
624
原创 WPF ControlTemplate 控件模板
区别于 DataTemplate 数据模板,ControlTemplate 是控件模板,是为自定义控件的 Template 属性服务的,Template 属性类型就是 ControlTemplate。自定义一个控件 MyControl,包含一个字符串类型的依赖属性。使用这个自定义控件,设置其 MyProperty 属性值,前端设置 ControlTemplate,
2024-12-18 15:23:01
735
原创 WPF DataTemplate 数据模板
DataTemplate 顾名思义,数据模板,在 wpf 中使用非常频繁。它一般用在带有 DataTemplate 依赖属性的控件中,如 ContentControl、集合控件 ListBox、ItemsControl 、TabControls 等。
2024-12-18 15:00:46
1639
原创 WPF 布局控件
wpf 布局控件有很多,常用的有:Grid, UniformGrid, Border, StackPanel, WrapPanel, DockPanel。
2024-12-18 09:40:11
927
原创 WPF 消息循环(二)
我们已经知道,win32/MFC/WinForm/WPF 都依靠消息循环驱动,让程序跑起来。这里就介绍 WPF 中是如何使用消息循环来驱动程序的。
2024-12-13 17:30:33
1319
原创 WPF 消息循环(一)
在说 wpf 消息循环之前,有必要了解一下软件程序运行的机制,这对理解 wpf 消息循环也有很大帮助。这是一段 c# Main 函数(类似 c/c++ 的 main 函数),如果不写 Console.ReadLine();,则程序会“一闪而过”,写了 Console.ReadLine();程序会阻塞,用户就可以查看结果。inputToLower这里有一个while循环,这样程序就可以一直运行了,我们可以说:这个程序由这个 while 循环驱动。那么 Windows 程序是由什么驱动的?
2024-12-13 17:23:07
1052
原创 WPF 相比 winform 的优势
方便地将数据与用户界面进行绑定,减少代码量,使用 MVVM 模式也能更改的开发和维护项目代码。:能够创建更具吸引力和现代化的用户界面,支持更复杂的图形和动画效果。:一种声明性的标记语言,使界面设计更加直观和易于理解。:将视图和业务逻辑更好地分离,提高代码的可维护性。:提供了更强大的布局系统,使得界面设计更加灵活。:图形可以自动缩放,适应不同的分辨率和屏幕大小。:可以轻松自定义控件和模板,以满足特定的需求。:可以创建各种复杂的动画效果,增强用户体验。:可以通过硬件加速等方式提高应用程序的性能。
2024-12-13 16:49:06
726
原创 c# TaskScheduler
在MyTaskScheduler 中,我建了一个线程 executionThread,线程方法是一个while循环,一直在监听有没有新的Task过来,有多个Task过来,就按Task创建顺序执行,没有的话 while 就暂停在 waitany 处。一般情况下没什么大问题,但如果这3个中的每个Task都非常耗CPU或者内存,而计算机又需要预留资源去干别的事情,这就要让3个Task不能同时执行。答案就是:TaskScheduler,它可以让已经创建好的 Task 去按照特殊的顺序来执行。怎样达到这样的效果?
2024-12-13 16:03:54
653
原创 c# 协变与抗变
在具有可变性的条件下,与原始类型转换方向相同的可变性称作协变(covariant)。在具有可变性的条件下,与原始类型转换方向相反的可变性称作抗变(contravariant),也称逆变。可变性远远不只是针对映射到数组的能力,也有映射其它集合的能力如List.很多人会问,说了这么多,到底这个协变或者抗变有什么实际价值?为什么接口参数类型前加了个 out 关键字就可以安全转换了?因为在接口类型参数前加上修饰关键字 in 和 out 可以表示该类型参数支持抗变和协变,会在安全范围内进行转换。
2024-12-12 13:30:23
1238
原创 C# 控制台程序 打开窗体
控制台项目Project1,程序代码,如:class Program{ private static Thread _thread; static void Main(string[] args) { _thread = new Thread(TestClass.Show); _thread.SetApartmentState(ApartmentState.STA);//设...
2020-01-17 17:33:32
3817
原创 WPF Dispatcher.FromThread
Dispatcher.FromThread 方法可以从线程中获得 Dispatcher ,如果此线程中操作了UI相关的对象,如窗体,控件等,那么它的返回值将不为null, 否则为null.举个例子:新建一个wpf应用:默认窗体 MainWindow 里放一个测试按钮。<Window x:Class="WpfApp1.MainWindow" xmlns="http...
2019-11-11 17:03:01
389
1
原创 C# async await 和 Task.Run 区别
摘要:C#中的Task.Run和async/await是两种异步处理机制,前者通过多线程实现异步,后者基于状态机实现非阻塞。Task是工作单元抽象,可能但不必须使用线程。关键区别在于Task.Run适合CPU密集型任务(消耗线程资源),async/await适合I/O密集型任务(资源高效)。实际应用中,await后是否返回原线程取决于同步上下文(UI程序会返回,控制台程序不会)。最佳实践是CPU密集型用Task.Run,I/O密集型用async/await,避免不必要线程创建。两者可组合使用,但需注意Tas
2019-10-25 16:03:10
981
原创 C# 异步编程 并行编程
目录异步编程1. Thread2. Task3.async + await并行编程Parallel本篇简单记录一下异步编程和并行编程,并以下图一个 Demo 来演示,源码地址我会公布在文章结尾。 异步编程 个人觉得,异步无非就是不影响某个线程的情况下,在另外的线程里执行任务的过程。异步编程即多线程编程。C# 里多线程编程写法有很多种,这里记录三种。...
2018-09-28 13:46:50
9609
2
原创 C#调用C++ DLL
记录一下两个内容:1.使用VS2015创建C++ DLL;2.使用C#调用上面创建好的C++ DLL;一.使用VS2015创建C++ DLL1.选择win32项目2.点击【下一步】->选择 dll 和预编译头3.随便添加一个头文件【MyTester.h】:并在stdafx.h文件中添加引用:随便输入一些简单定义代码,这里以 struct / int / bool / char /BYTE 类...
2018-06-13 11:18:28
8862
原创 C++ 模拟 C#事件
网上看到一些关于C++模拟和C#类似的Event处理,这里记录一下:新建一个event.h头文件:#pragma oncetemplate <typename Handler>class event{private: Handler m_Handler;protected: //模拟C# event 的add/remove访问器 //如果要重新实现add/remo...
2018-06-08 15:50:45
745
原创 Visual Studio 引用不到头文件的问题
在D盘Include文件夹下放了个头文件:CtiSMAPIWIn32.h在vs中也设置好了附加包含目录:结果在项目中怎么也引用不到该头文件:最后发现是因为:vs需要 所有配置+平台都得配置 附加包含目录 才行:
2017-11-23 15:17:25
33562
8
原创 Mono跨平台体验
最近遇到一个特殊需求,客户要求做一个运行在Linux上的软件,并且要有软件界面。考虑到不会GTK#,QT也不熟悉,所以想到还是用mono Windows Form(.net跨平台项目)比较好,这里记录一下做法。1.首先得准备一些东西:一台Windows电脑visual studio 2015 (其它版本也可以)一个虚拟机软件VisualBox(其它虚拟机软件也可以,这里以Visua
2017-10-13 09:31:06
1389
原创 WPF自定义控件 按钮 (二)
上一篇介绍了如何使用阿里巴巴图标和制作带图标的按钮,前面的做法只是简单介绍,要真正能够运用到项目中,还有一段路要走,这里继续介绍如何完善之前的自定义按钮,使之能够合理的运用到以后的项目中。就拿上一个测试代码来说:<Window x:Class="WpfApplication1.MainWindow" xmlns="http://schemas.microsoft.com/w
2017-09-19 14:38:49
1280
原创 WPF自定义控件 使用阿里巴巴图标
上一篇介绍了 WPF自定义控件 按钮 (一),在进一步介绍WPF自定义控件 高级按钮之前,先介绍一下如何在WPF项目中使用阿里巴巴图标。还是在上一篇项目基础上,在WPF自定义控件类库项目 Controls 文件夹下,新建一个资源字典(WPF)文件,取名: MyIcon.xaml :
2017-09-19 13:17:53
2634
原创 WPF自定义控件 按钮 (一)
从这里开始,记录WPF自定义控件的制作方法,相比制作传统winform的自定义控件来说,WPF自定义控件做起来更加优雅,效果也更好。从最常用的控件 Button 开始:首先从MSDN上查看 Button 控件的默认样式和模板,如下:
2017-09-19 09:58:35
4415
原创 C#调试C++ DLL代码
有些C#写的项目中会调用到C++ DLL,有时候需要调试进C++代码里去查问题,过程中经常会遇到无法命中C++代码断点的问题,在此记录一下常用的设置方式,照着设置的话基本上没什么问题:1)确保C#和C++项目源代码在同一个解决方案里 (这一点有待商榷,后来经过验证并不一定要在同一个解决方案里);2)确保C#项目,属性设置->调试选项->“支持非托管代码调试”打钩( 如果是...
2017-08-03 15:12:30
5390
1
原创 SQL Server 远程连接问题
1.如何配置sqlserver使之能够远程被访问,网上搜一大把,如:SQL Server 2008 R2如何开启数据库的远程连接2.尽管是配置好了,但是还是经常会出现不能访问的问题,可参考:SQL - 配置SQLServer 使其可以远程访问3.检查能不能远程访问,可以使用SQL Server Management Studio输入【地址,端口】:如,我在路由器上配置了映射端口,外部访
2016-10-15 00:13:36
1016
原创 C++封装C#中的事件
背景: 用户要求我们提供给他们API,如果这些API都是用C#写的DLL,而用户要求API为C++的 DLL,这种情况下就需要将C# DLL里面的内容封装成C++ DLL。这里针对c#中的事件,记录一下如何使用C++来封装c#的事件:1.创建一个简单的C# DLL实例:a.新建一个c# DLL项目,取名:TestDotNetDLL,添加一个类:Customer,这
2016-08-09 11:40:44
6421
12
原创 C++调用C++写的DLL
1. 创建DLL项目:a.新建一个空的win32 DLL项目,添加一个简单的头文件和一个cpp文件:这里,头文件位于该路径之下:D:\Code\Demos\Test_Win32DLL_V1\Test_Win32DLL_V1 头文件和cpp文件内容分别是:#pragma once#include using namespace std;#defi
2016-08-04 12:26:56
948
原创 使用SVN-subwcrev命令 发布软件版本
这里使用visual studio (C#) 软件开发环境作为介绍,其它依葫芦画瓢。在软件开发过程中,每次对一个软件产品的release,都要处理该软件版本号。有的版本号是人为定的,有些是自动生成的,这里介绍在使用SVN版本管理软件的qingkua
2016-06-15 14:23:48
5245
原创 主机不能访问虚拟机中的web服务【解决方案】
情况是这样的:在虚拟机visualBox里安装了centos7系统,并且在该系统里运行了一个web服务,想通过宿主机或者外网来访问该服务,总是无法访问(虚拟机网卡已配置成桥接):宿主机【win7】ip:虚拟机【CentOS7】ip:彼此能互相ping通,虚拟机中启动了一个简单的web服务:一个简单的只要访问就能得到一句简单的响应:在虚拟机内部能够访问:
2016-01-21 01:30:52
72294
8
原创 DataGridView特殊按钮(DisableButtonColumn)
实现的效果如下图,点击一次按钮之后,按钮不可再点击:主要代码如下: private void AddButtonColumn() { DataGridViewDisableButtonColumn column1 = new DataGridViewDisableButtonColumn(); colum
2015-08-17 16:34:35
4507
4
原创 C# 模仿QQ右下角 消息闪烁提示
主要是使用自带的notifyIcon这个控件即可,用两个icon图片循环切换,效果即闪烁提示。主要代码如下:public partial class Form1 : Form { int i = 0; //先设置一个全局变量 i ,用来控制图片索引,然后创建定时事件,双击定时控件就可以编辑 private Icon ico1 = Propert
2015-08-17 14:25:18
4629
原创 Asp.Net 4.5网站使用IIS发布 uploadify插件 上传文件大小问题
遇到一件头大的事情,最近一个mvc网站项目是Asp.Net 4.5版本,发布在IIS 6.1上面.项目中使用到jQuery的一个文件上传控件uploadify,结果这个控件死活上传不了超过30M的文件,也找了网上各种解决方案,在webconfig下加了下面两个地方:
2015-07-18 18:25:11
1967
原创 C# 使用 Socket (Udp + Tcp)
一个简单示例,记录下C#中如何使用Socket:这个示例的作用是:服务端可以监测到是否和客户端连接,并且如果连上了,可以互相收发消息。如上图,我用的本机测试的,如果是不同机器且连着网,请换成对应的局域网ip或者公网映射ip.步骤:1.新增个空解决方案,并添加两个winform项目,一个是server端一个是client端:2.在服务端和客户端分别加入如下代码:服...
2015-06-29 17:35:38
5216
1
原创 outlook 2013 配置163企业邮箱
网页版的邮箱用得实在心累......这里记录下outlook 2013 如何配置163企业邮箱.一.首先配置outlook2013,步骤如下:1)打开outlook 2013,如下图,填好:2)点开“其他设置“,如下填好:3)点击”下一步”或者“测试账户设置”:4)最终如下图:-----------------------
2015-04-23 21:45:13
42472
原创 visual studio 宏不能运行的解决方法
VisualStudio里有宏功能(VisualStudio使用技巧),一般我只是用来自动打打注释(本人较懒),但是有时候windows自动更新之后,宏会变得不能运行,下面这种方法可以解决,网上找的比较辛苦,记录一下:在:C:\Program Files\Common Files\microsoft shared\VSA\9.0\VsaEnv其中64位机器可能在
2015-04-18 22:57:06
1681
原创 设置鼠标光标在DataGridView某个单元格中的位置
设置鼠标光标在DataGridView某个单元格中的位置这里不是介绍如何选中DataGridView某个单元格,而是:在DataGridView某个单元格正处于编辑状态时,如何将鼠标的编辑光标自动定位到特定位置。如下图:将输入光标定位到test字符串中间:现实生活中,在医院、汽车、银行等窗口单位的时候,工作人员很少用到鼠标,他们操作键盘的速度甚至比程
2015-04-05 16:29:55
14629
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅