C#
文章平均质量分 88
奔跑的大伟哥
这个作者很懒,什么都没留下…
展开
-
c#调用c++接口笔记
c#调用c++的函数在想通了之后就不难了,说是函数调用,其实就是参数传递的过程。只要能理解c#和c++中数据在内存中的存放形式,再奇葩的函数都不会有问题了。通常c++导出的接口都是extern c形式,即c语言形式接口。1. C++函数中的常见类型传递方式1.1 内置类型intshortchar内置类型通常有固定大小的内存,只需要在c#中找到对应的固定大小类型即可。1.2 数组/指针类型int i[100]char*void*数组或指针传递的都是地址,在接收时有多种方式:原创 2020-09-23 11:33:25 · 1762 阅读 · 2 评论 -
C#Struct结构体内存对齐
在c/c++中内存对齐是个经常遇到的问题,现在的CPU一次读取64bit,所以Struct编译时会自动8byte对齐。c#同样的结构体也是8byte对齐。using System;struct ss{ public int a; // 4字节 // public int aa; // 4字节 public Int64 aaa; public In...原创 2020-03-18 10:59:31 · 1859 阅读 · 0 评论 -
使用C#与GO语言开发高性能且安全的Windows桌面应用程序
在Windows上开发桌面应用程序最快的方式无疑是使用C#,前有WinForm现有WPF,都是很好的开发框架,不管是MFC还是QT总还是复杂了一些。但是C#有一个最最大的缺点,就是没办法避免反编译,虽然我也经常反编译别人程序,但是绝不愿意看到自己的程序被别人反编译。曾经我考虑过用C/C++做核心的功能,界面用C#做。虽然也是一种办法,但是C/C++还是麻烦了一些,而且在部署时,需要同时安装.NE...原创 2020-03-12 17:18:25 · 5495 阅读 · 0 评论 -
.Net 内存管理和垃圾回收(一)非托管资源清除
本文是翻译Memory Management and Garbage Collection in .NET,本人英语水平不行,语文水平也不行,若有错误恳请评论指正。本文权当是英语翻译练习。文档的本部分提供了关于.NET中内存管理的信息。.Net 内存管理和垃圾回收(一)非托管资源清除.Net 内存管理和垃圾回收(二)垃圾回收机制非托管资源清除 描述如何合适的管理和清除非...原创 2018-04-12 18:05:38 · 1639 阅读 · 0 评论 -
C# 弱事件模式(二)DataBinding 和 弱事件模式
在C# 弱事件模式(一)中介绍了弱事件模式是如何工作的,接下来我们介绍弱事件模式是如何在WPF中发挥其强大的作用。 首先,我们实现一个简单的WPF双向绑定代码: <!-- MainWindow.xaml --> <Window.DataContext> <local:SayHelloViewModel/> <...原创 2018-04-12 16:15:40 · 1108 阅读 · 0 评论 -
C# 弱事件模式(一)认识弱事件模式
首先查看官网的解释: In applications, it is possible that handlers that are attached to event sources will not be destroyed in coordination with the listener object that attached the handler to the source. ...原创 2018-04-12 11:46:45 · 1614 阅读 · 0 评论 -
C#中delegate和Event的区别
委托具有以下属性: 委托类似于 C++ 函数指针,但它们是类型安全的。 委托允许将方法作为参数进行传递。 委托可用于定义回调方法。 委托可以链接在一起;例如,可以对一个事件调用多个方法。 方法不必与委托类型完全匹配。 事件具有以下属性: 发行者确定何时引发事件;订户确定对事件作出何种响应。 一个事件可以有多个订户。 订户可以处理来自多个发行...原创 2018-04-11 18:02:17 · 3305 阅读 · 0 评论 -
WPF基础知识概要
wpf 基础:绑定,不会绑定谈不上懂wpf布局,不管是web还是winform,都必须要会布局,布局基础类Panel触发器,要想用好wpf,触发器必须要会样式,给软件穿衣服,布局和样式一般是放到一起说,类似html+css命令,命令也是wpf一大特点,必须要懂的基础依赖属性模板路由和事件资源进阶:MEFPrismMVMLight动画(Animation、Ti...原创 2018-03-05 17:18:43 · 473 阅读 · 0 评论 -
c# 守护进程,WPF程序自守护
如何防止wpf程序异常关闭,守护进程是暂时能想到的最好方式。最好是能够一次编码就把守护进程的事情做完。思路:程序打开时,首先打开守护进程;由守护进程打开主程序;守护进程与主程序间互相守护,任何一个挂了都能自动重启。实现:Mutex互斥量,守护进程和主程序分别使用不同的互斥量,既可以防止重复打开软件,又可以检测程序是否在运行。话不多说,直接上代码: /// ///原创 2018-01-11 16:26:46 · 2755 阅读 · 0 评论 -
C# 修改图片文件分辨率大小
将文件夹及子文件夹下的所有.jpg格式的图片宽度调整成统一大小,并包存到指定文件夹内。 public static void ResizeImg(string srcFold, string desFold, int maxSize) { var ret = Directory.GetFiles(srcFold, "*.jpg");原创 2018-01-03 16:59:30 · 10798 阅读 · 0 评论 -
c# sslstream
SslStream.AuthenticateAsServer 由服务器调用,使用指定的证书、要求和安全协议对服务器和客户端(可选)进行身份验证。 SslStream.AuthenticateAsServer (X509Certificate) serverCertificate:用于对服务器进行身份验证的证书; 默认使用Default进行身份验证,身份验证过程中不检查证书吊销列表;原创 2018-01-03 11:09:59 · 3800 阅读 · 0 评论 -
WPF无边框拖动、全屏、缩放
先看效果无边框 设置WindowStyle=”None”,窗口无关闭及缩放按钮,但还有黑边;设置AllowsTransparency=”True”,黑边没有了。原创 2017-09-22 09:29:29 · 4540 阅读 · 1 评论 -
.Net 内存管理和垃圾回收(二)垃圾回收机制
本文是翻译Memory Management and Garbage Collection in .NET,本人英语水平不行,语文水平也不行,若有错误恳请评论指正。本文权当是英语翻译练习。.Net 内存管理和垃圾回收(一)非托管资源清除.Net 内存管理和垃圾回收(二)垃圾回收机制垃圾回收(GC)基础GC在CLR中充当一个自动的内存管理器,它有以下优点:使你可以...原创 2018-04-13 10:15:02 · 833 阅读 · 0 评论 -
Processes, Threads, and Apartments
本文翻译自https://msdn.microsoft.com/en-us/library/ms693344(v=vs.85).aspxProcesses, Threads, and Apartments进程、线程、套间(为什么会这样翻译,好坑)进程是虚拟内存空间、代码、数据和系统资源的集合。线程是在进程中被连续执行的代码。处理器执行的是线程,而不是进程,所以每一个应用程序拥有...翻译 2018-05-30 17:37:37 · 366 阅读 · 0 评论 -
ABP MPA+Mysql笔记
添加数据库device表实体模型(SNT.AccessCtrlMgt.Core)添加Devices.Device将device表实体模型添加至库(SNT.AccessCtrlMgt.EntityFrameworkCore)EntityFrameworkCore.AccessCtrlMgtDbContext添加device服务及Dto(SNT.AccessCtrlMgt.Appl...原创 2019-03-27 11:04:12 · 267 阅读 · 0 评论 -
C# 预处理器指令
c#的预处理器用于帮助条件编译,但是不同于C和C++指令,不能用于创建宏。参考:C# preprocessor directivesConditional Compilation in Visual Basic“项目设计器”-&amp;amp;amp;amp;amp;gt;“生成”页 (C#)文章目录声明编译常量Visual Studio设置编译常量预定义编译常量预处理器指令#if、#else、#elif、#endif#de...原创 2018-12-28 16:29:01 · 1172 阅读 · 0 评论 -
WPF面试知识要点
一个星期面试了8家公司,把所有面试的知识点整理如下,有些重复的内容: 1. 跨线程操作(Dispatcher) 2. 多线程(异步编程和async/await) 3. template(模板类型【控件模板、数据模板、面板模板】、逻辑树【UI界面的组成元素】、可视化树【逻辑树的扩展版本,将元素分成更小的部分】) 4. binding(绑定源、绑定模式【default、OneWay、T原创 2017-07-18 10:28:59 · 18358 阅读 · 0 评论 -
(转载)Service Locator模式(简单的IOC容器实现 MVVMLight SimpleIoc)
在MVVMLight中实现了一个SimpleIOC,是一个简单的IOC容器。根据SimpleIOC的源码,我们来看SimpleIOC是如何实现的。IOC框架的功能IoC容器需要提供的接口:类型注册和创建实例...转载 2018-09-04 20:28:25 · 4380 阅读 · 0 评论 -
(转载)详解C#7.0新特性
原文地址:https://www.cnblogs.com/cncc/p/7698543.html1. out 变量(out variables) 以前我们使用out变量必须在使用前进行声明,C# 7.0 给我们提供了一种更简洁的语法 “使用时进行内联声明” 。如下所示:1 var input = ReadLine();2 if (int.T...转载 2018-07-26 10:41:07 · 225 阅读 · 0 评论 -
(转载)C#发展历程以及C#6.0新特性
原文地址:[https://www.cnblogs.com/yinrq/p/5600530.html](https://www.cnblogs.com/yinrq/p/5600530.html)***一、C#发展历程下图是自己整理列出了C#每次重要更新的时间及增加的新特性,对于了解C#这些年的发展历程,对C#的认识更加全面,是有帮助的。二、C#6.0新特性1、字符串插值 (String...转载 2018-07-26 09:59:06 · 217 阅读 · 0 评论 -
SSL数字证书(二)使用makecert.exe签发证书
首先放出几个参考文档:MSDN-MakeCertSSL协议详解makecert 制作数字证书数字证书如果想深入理解数字证书,有几个概念必须要搞清楚数字证书标准 x.509数字证书格式 PEM、DER证书链制作证书需要用到几个工具:makecert.exe证书制作工具Cert2Spc.exe公钥证书格式转换成SPCpvk2pfx.exe将公钥证书和私...原创 2018-06-25 11:23:47 · 7894 阅读 · 0 评论 -
c# InvokeRequired 解决跨线程访问UI控件的问题
当InvokeRequired为true时,说明在非创建线程访问当前UI控件,但是C#中禁止非UI控件创建线程去访问控件,解决办法:public void Do(){ if (this.InvokeRequired) { this.Invoke(new MethodInvoker(() => { Do(); })); } else { /** 业务逻辑原创 2017-12-16 21:33:11 · 10590 阅读 · 0 评论 -
c# 读写app.config
//AppConfigHelper.csusing System;using System.Collections.Generic;using System.Configuration;using System.Linq;using System.Text;using System.Threading.Tasks;using System.Xml;namespace Utilities原创 2017-12-16 10:01:36 · 1607 阅读 · 0 评论 -
c#和c++数据类型对应关系
作用 C++ 大小 C# 大小 .NET Framework类型 取值范围 后缀 字符 char 1 sbyte 1 System.SByte -128~127 字符(无符号) unsigned char 1 byte 1 System.Byte 0~255 宽字符 wchar_t 2 char 2 System.Char 宽字符(无符号) unsigned wchar_t转载 2017-12-14 16:03:45 · 2590 阅读 · 0 评论 -
Thrift 双向通信实现(C#版)
主要参考了:Apache thrift RPC 双向通信,但是这篇是用Java写的,和C#会有一些不一样,所以写了一个C#版的。此博客使用Thrift 0.10.0版本,不同版本可能会有差异。 如何在C#中引用Thrift这些就不写了,可以翻我之前的博客,现在开始直接通过代码来说明: 编写Thrift IDL文件 编写一个非常简单的功能,输入一个字符串参数,返回值为空://HelloWorld原创 2017-08-17 15:06:06 · 4342 阅读 · 3 评论 -
DDD、CQRS、Event Sourcing
这几个看着牛X的名词先放这里,现在还一点都不懂,写下来让自己一点点补充。 先给几个参考: 这位王大哥写得通俗易懂(敏捷软件开发)原创 2017-08-08 15:10:33 · 900 阅读 · 0 评论 -
C#关键字--修饰符
访问修饰符:public、protected、private、internal 用于指定声明的成员或类型的可访问性。 public:不受限 protected:仅限于包含类或包含类派生的子类 internal:当前程序集 protected internal:internal 或 protected ,两者求并集 private:当前包含类型abstract 指示被修改内容的实现已丢原创 2017-08-01 15:10:56 · 857 阅读 · 0 评论 -
c#浅拷贝/深拷贝和内存分配
值类型和引用类型 概念:值类型直接存储其值,而引用类型存储对其值的引用。 引用类型:基类为Objcet 值类型:均隐式派生自System.ValueType 值类型变量声明后,不管是否已经赋值,编译器为其分配内存。引用类型当声明一个类时,只在栈中分配一小片内存用于容纳一个地址,而此时并没有为其分配堆上的内存空间。当使用 new 创建一个类的实例时,分配堆上的空间,并把堆上空间的地址保存到栈原创 2017-08-04 15:00:56 · 1505 阅读 · 0 评论 -
C#事件和委托
事件和委托经常连在一起说,然后就不知道他们两个具体有什么区别了。今天特意在网上搜了一下,把收集的一点资料整理一下,以防自己忘记了。 1. 委托在C#中其实也是一个类,用反编译工具可看到委托是System.MulticastDelegate的子类,类中定义了一个构造函数、一个Invoke方法、两个异步方法(BeginInvoke/EndInvoke) 2. 事件是一个特殊的委托对象,用event关原创 2017-08-08 10:36:31 · 265 阅读 · 0 评论 -
C# MEF
基础入门参考:MEF核心笔记(1)基础应用 上面这篇文章对写得非常清楚,就没必要再单独写一篇了。 MEF:Managed Extensibility Framework,.net 4.0中带来的一个基于托管的扩展程序开发框架。像是一个IOC框架。原创 2017-08-07 18:05:52 · 1100 阅读 · 0 评论 -
c#扩展方法
代码:public static class StringExtern{ public static string IsNullOrEmpty(this string s) { return string.IsNullOrEmpty(s); }}扩展方法必须是在静态类中的静态方法,类名无要求方法参数第一个必须为自身参数,this + 扩展类 + 参数名原创 2017-08-07 17:35:31 · 282 阅读 · 0 评论 -
c#匿名类与匿名函数、lambda表达式
匿名类(隐式类型) 关键字:var 在linq查询获取结果时经常会用到,例如:var result = from a in b where b.id = 1 select new { a.name , a.age };也可自定义var v = new { name = "david" , age = 27 };var原创 2017-07-31 15:38:14 · 5554 阅读 · 0 评论 -
C#异步编程和await/async
在.NET 1.0开始微软就对异步编程做了相应的支持——即异步编程模型(APM), 之后在.NET 2.0中又提出了基于事件的异步编程模型(EAP),.NET 4.0中又提出了基于任务的异步编程模型(TAP),在.NET 4.5(对应于C#5.0)中提供了async和await两个关键字。…待添加C# 版本和.NET 版本对应关系:C# 版本.NET Framework版本Visual Stud原创 2017-07-29 16:57:39 · 2217 阅读 · 0 评论 -
C# Action和Func委托
简单理解:Action和Func都可以实现委托,Action是无返回值的委托,Func是有返回值的委托。代码: private void btnRun_Click(object sender, RoutedEventArgs e) { //Action 调用 Action act = new Action(InitDat转载 2017-07-29 16:18:14 · 698 阅读 · 0 评论 -
Android和C#实现Thrift服务端和客户端
现在一个项目需要实现安卓和服务器双向通信,因为服务器上的服务软件是C++写的,所以需要一种可以跨语言的通信框架。最基础的事Socket,但是不想用,用了RPC应该再也不会想用Socket了吧。扯完了,接下来进入正题。本文主要讲得内容:C# Thrift服务端和客户端实现,并实现消息发送及接收Android Thrift服务端和客户端实现,并实现消息发送及接收Android发送消息到C#服务端原创 2017-08-11 18:56:12 · 2025 阅读 · 0 评论 -
C#实现Thrift服务端与客户端
这一篇是将Android和C#实现Thrift服务端和客户端中C#部分单独拆分开来的,方便不需要Android的开发者使用。 编写Thrift文件 写个简单的,有输入参数,无返回值,文件命名为 HelloWorld.thriftservice HelloWorldService{ void SayHello(1:string msg);}根据Thrift文件生成对应的C#和java文件原创 2017-08-12 14:48:04 · 8455 阅读 · 0 评论 -
C# JSON格式化,时间格式化、忽略null值
/* 忽略null值,设置datetime格式化格式 */ var jsonSetting = new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore, DateFormatString = "yyyy-MM-dd HH:mm:ss" }; return JsonConvert.Serialize原创 2017-12-05 10:47:57 · 2906 阅读 · 0 评论 -
C# 调用C++DLL传递的bool型,返回混乱(c++为false,c#却为ture)
感谢原作者:C# 调用C++DLL传递的bool型,返回混乱原因:C++中bool占一个字节,C#中bool占4个字节解决方法:将C++中的bool该为BOOL,或C#中的bool该为byte原因:统一变量所占地址空间大小。C++中BOOL与C#中bool同样占用4个字节,C#中byte与C++中bool同样占用一个字节。 C++中定义如下结构体struct MYSTRUCT{转载 2017-12-11 18:34:56 · 1516 阅读 · 0 评论 -
WPF使用矢量字体图标(阿里巴巴iconfont)
常用的矢量字体图标:阿里巴巴iconfont,FontAwesome;今天介绍如何在wpf中使用阿里巴巴iconfont矢量图标。其他矢量图标也是类似的使用方式。1.下载矢量图标ttf文件,并包括在项目中具体如何下载,不详写了。将ttf文件拷贝至项目,并包括在项目中。 下载下来的文件内容: 我们需要将iconfont.ttf包括在项目中,打开demo_unicode.html可以看...原创 2017-11-22 18:29:24 · 8607 阅读 · 3 评论 -
在使用ILSpy对c# dll进行反编译时遇到的问题及处理方式
感觉Reflector比ILSpy好用,但是Reflector收费。ILSpy经常反编译出一些乱七八糟的东西。但是在使用中,最好还是两个一起用,因为经常反编译后的代码出错,但是不知道为什么,两个对比一下就知道了,像下面这张图: 左边是ILSpy,右边是Reflector,两个反编译的结果还不一样,错误也不一样。1. error CS0579 error CS0579: Duplicate ‘原创 2017-08-19 21:02:46 · 23191 阅读 · 0 评论