随笔分类 - C#
摘要:C#和C++联合编程有以下两种常用的方式: 利用PInvoke实现直接调用,该方法仅支持函数调用。 利用C++/CLI作为代理中间层。 基于PInvoke调用C++ 数据类型大小 虽然不同语言中可能对于不同类型的名字不同,但其根本上都是在操作对应数据的指针。至少能够确定好C#和C++之间的类型对应关
阅读全文
摘要:一个不常用,但还是记录一下的要求。 当我们选择路径后,出于一些原因,我们不希望用户选择的文件路径相对于我们当前软件的路径深度过深。这时候,我们就需要判断一下路径深度。代码如下 判断路径深度 private bool CheckPath(string tmpPath,int depth) { retu
阅读全文
摘要:Newtonsoft.Json(Json.NET)核心概念与高级用法笔记 一、JSON 解析的核心过程 当我们调用: JObject obj = JObject.Parse(jsonString); Json.NET 会执行以下过程: 解析 JSON 文本字符串(如 "{ "name": "Yty"
阅读全文
摘要:Bitmap概述 Bitmap是C# 中用于处理图像的核心类之一,位于System.Drawing命名空间中。它封装了GDI+位图,允许开发者加载、保存、显示和操作图像文件或内存中的位图资源。Bitmap 类支持多种图像格式,包括 BMP、JPG、PNG、GIF 等。 Bitmap属于比较底层的图像
阅读全文
摘要:目前见过的序列化实现方法主要有以下两种 使用BinaryFormatter实现序列化和反序列化 使用Json实现序列化和反序列化 无论哪种反序列化,最重要的一点是只保存关键数据。对于中间信息,尤其是UI控件等。一律不要去保存。正确的思路是,我们在保存关键信息关闭程序后,下次程序打开加载信息,呼出UI
阅读全文
摘要:这个问题很奇怪,情况是当我使用Threading.Timer计时器时,每隔一段事件自动触发一个回调方法。在回调方法中为了修改UI控件。使用了Dispatcher.BeginInvoke()方法来显示一个窗口,但我发现这个窗口总是弹不出来。换成Invoke()就好了。 由于Threading.Time
阅读全文
摘要:在编写程序的通讯模块时,涉及到了TCP通讯。模块的设计思路是,开启TCP端服务器后在一个线程中实时监听端口号,为每一个连接进来的客户端分配一个线程用来实时通信。 服务端在关闭时通过将标志位取反实现线程的结束,从而关闭服务端。 下面这段代码看着没什么问题,但关键就在于this.ServerSocket
阅读全文
摘要:此处,主要涉及到一些概念的辨析。 多线程与异步编程的区别 异步并不意味着多线程,单线程同样可以异步(单线程异步、多线程异步)。多线程更像操作系统中的"并行执行",而异步编程则对应着”并发执行“。 异步默认借助线程池实现。 多线程经常阻塞,而异步要求不阻塞。多线程编程时,为了防止死锁,往往需要直接阻塞
阅读全文
摘要:License授权加密功能实现 不希望客户免费无限制地使用开发的应用程序。希望应用程序验证当前客户端对应的License是否有效,如果有效再打开应用程序。 实现方法 思路:在程序主窗口打开前让程序首先去验证对应的License文件。 首先使用加密工具在项目的运行目录下生成对应的License文件。
阅读全文

浙公网安备 33010602011771号