Kok.Toolkit.Wpf
1.0.1
dotnet add package Kok.Toolkit.Wpf --version 1.0.1
NuGet\Install-Package Kok.Toolkit.Wpf -Version 1.0.1
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="Kok.Toolkit.Wpf" Version="1.0.1" />
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="Kok.Toolkit.Wpf" Version="1.0.1" />
<PackageReference Include="Kok.Toolkit.Wpf" />
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add Kok.Toolkit.Wpf --version 1.0.1
The NuGet Team does not provide support for this client. Please contact its maintainers for support.
#r "nuget: Kok.Toolkit.Wpf, 1.0.1"
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package Kok.Toolkit.Wpf@1.0.1
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=Kok.Toolkit.Wpf&version=1.0.1
#tool nuget:?package=Kok.Toolkit.Wpf&version=1.0.1
The NuGet Team does not provide support for this client. Please contact its maintainers for support.
Kok.Toolkit
介绍
Kok.Toolkit是个人在工作过程中不断积累的一个.Net平台下的通用代码库,封装多种通用工具类代码,后续也会不断更新,增加更多通用的公共操作类
目前该类库基于.Net 6.0,而且也不会考虑兼容低版本运行时
解决方案下包含了存放源码的src目录和存放测试代码的test目录
| 项目 | 说明 |
|---|---|
| Kok.Toolkit.Core | 提供通用工具类,如二进制序列化/反序列化器、CRC校验码计算器、日志记录器灯;也提供了若干常用的类型扩展方法 |
| Kok.Toolkit.Wpf | 基于CommunityToolkit.Mvvm实现了WPF下的MVVM,提供了视图模型基类、对话框服务、导航服务,并封装了通用WPFHost,也提供了若干常用的转换器等 |
| Kok.Test.WpfDemo | 使用Kok.Toolkit.Wpf进行开发的示例程序 |
Kok.ToolKit.Core
二进制序列化/反序列化
支持对所有基元类型、类、结构体、字典、列表集合(目前仅支持一元泛型列表集合)、数组集合(目前仅支持byte[])的二进制序列化和反序列化,支持自行指定序列化顺序、大小端编码、字符串编码,支持指定CRC算法并可自动计算校验和
序列化/反序列化代码示例
- 基本类型
int data=1234;
BinarySerializer.Serialize(data, out var bytes, out var error);
BinarySerializer.Deserialize<int>(bytes, out var d1, out var message);
- 字符串/泛型集合
集合类型在序列化后会在实际数据的前面增加4字节的长度,标识集合的长度
string data="Hello World";
BinarySerializer.Serialize(data, out var bytes, out var error);
BinarySerializer.Deserialize<string>(bytes, out var d1, out var message);
类
声明一个类,如下所示
public class TestMessage<T> where T : class, new() { public byte Header { get; set; } public T? Data { get; set; } } public class CmdData { public byte Type { get; set; } public int SourceId { get; set; } public int Count { get; set; } [CollectionItemCount(nameof(Count))] public List<byte>? StateList { get; set; } }var data = new TestMessage<CmdData>(); BinarySerializer.Serialize(data, out var temp, out _); BinarySerializer.Deserialize<TestMessage<CmdData>>(temp, out var data1, out _);默认情况下,使用大端字节序,字符串使用
UTF8编码,若要指定大小端或字符编码,可自行调用BinarySerializer的构造函数,代码如下:var stream = new MemoryStream(); using var serializer = new BinarySerializer(stream,Encoding.UTF8,true);特性
名称 说明 BinaryIgnoreAttribute在二进制序列化/反序列化时,忽略具有该特性的属性 CollectionByteLengthAttribute标识集合的字节长度,可关联某一个特定属性,也可指定具体的数值,声明该特性后,将不再额外生成4字节的长度 CollectionItemCountAttribute标识集合的长度,即Item的数量,可关联某一个特定属性,也可指定具体的数值,声明该特性后,将不再额外生成4字节的长度 FieldOrderAttribute标识各属性在序列化时的顺序,按升序排序 CrcStartByteAttribute从具有该特性的属性开始计算 crc,适用于某协议实体中有多个crc的情况,若只有一个crc,可不声明,默认从第一个属性(即第一个字节)开始计算CrcAttribute标识该属性值为 crc,可指定crc算法CRC
均使用查表法实现
CRC8
chsi算法 多项式 初始值 结果异或值 输入反转 输出反转 Standard0x070x000x00falsefalseITU0x070x000x55falsefalseROHC0x070xFF0x00truetrueMAXIM0x310x000x00truetrueCRC16
算法 多项式 初始值 结果异或值 输入反转 输出反转 IBM0x80050x00000x0000truetrueMAXIM0x80050x00000xFFFFtruetrueUSB0x80050xFFFF0xFFFFtruetrueMODBUS0x80050xFFFF0x0000truetrueCCITT0x80050x00000x0000truetrueCCITT-FALSE0x80050xFFFF0x0000falsefalseX250x10210xFFFF0xFFFFfalsefalseYMODEM0x10210x00000x0000falsefalseDNP0x3D650x00000xFFFFtruetrueCRC32
算法 多项式 初始值 结果异或值 输入反转 输出反转 Standard0x4C11DB70xFFFFFFFF0xFFFFFFFFtruetrueStandardFalse0x4C11DB70x000000000x00000000falsefalseMPEG20x4C11DB70xFFFFFFFF0x00000000falsefalse
通信器
报文收发器
一个使用UdpClient实现的可以定时或定次向外发送强类型的报文,同时也可接收指定的强类型报文的通信器,其内部处理了报文的序列化和反序列化,调用方仅需实现报文的生成方法和对已接收报文的处理方法即可
var transceiver1 = new Transceiver<MyTelegram>();
//创建发报机构建器
var builder = TransmitterBuilder<MyTelegram>.CreateCyclical(new List<TargetEndPoint>()
{
new("收发器1", new IPEndPoint(IPAddress.Loopback, 8090), null)
}, 1000, MakeHelloText, "收发器1");
//设置发报机
transceiver1.SetTransmitter(builder);
//设置收报机
transceiver1.SetReceiver(OnGotTelegram);
//启动收发器
if (transceiver1.Start("127.0.0.1", 8081, "收发器1"))
Console.WriteLine("成功启动收发器");
//生成报文
private static List<MyTelegram> MakeHelloText(object? arg)
=> new() { new MyTelegram(1, "my name is t1") };
//处理收到的报文
private static void OnGotTelegram(Packet arg1, object? arg2)
=> Console.WriteLine($"收到来自{arg1.SourceAddress}:{arg1.SourcePort}的报文,{arg1.Data.ToString(" ", string.Empty, "{0:X}")}");
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net6.0-windows7.0 is compatible. net7.0-windows was computed. net8.0-windows was computed. net9.0-windows was computed. net10.0-windows was computed. |
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.
-
net6.0-windows7.0
- CommunityToolkit.Mvvm (>= 8.2.2)
- Kok.Toolkit.Core (>= 1.0.1)
- Microsoft.Extensions.Hosting (>= 8.0.0)
- Microsoft.Extensions.Hosting.Abstractions (>= 8.0.0)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.