一、项目简介
Com.Gitusme.Net.Extensiones.Wpf 是一款 Wpf 扩展组件。基于.Net Core 3.1 开发,当前最新 1.0.1 版本。包含 核心扩展库(Com.Gitusme.Net.Extensiones.Core)、视频渲染(Com.Gitusme.Media.Video)、串口通信(Com.Gitusme.IO.Ports.SerialPort) 等重要功能。集成快捷,使用方便。
二、组件能力
2.1 核心扩展库
Com.Gitusme.Net.Extensiones.Core 是一个 C#.Net 扩展库。当前最新 1.0.7 版本,使用方便快捷,能够减少代码量,提高编程效率。基于 .Net Standard 2.0 开发,支持 windows、linux、IOS 等多平台。详细请参阅:
【开源项目】C#.NET 扩展库 -- Com.Gitusme.Net.Extensiones.Core-CSDN博客
2.2 视频渲染
Com.Gitusme.Media.Video 是一款视频渲染组件。基于.Net Core 3.1 开发,支持平铺模式和画廊模式,支持多画面异步渲染,能有效发挥硬件性能,集成快捷使用方便。免费版仅支持1个画面渲染,多画面渲染诉求,请与作者联系以供技术支持。详细请参阅:
【开源项目】WPF 扩展 -- 多画面视频渲染组件-CSDN博客
2.3 串口通信
Com.Gitusme.IO.Ports.SerialPort 是一款 Windows 串口通信组件,基于.Net Core 3.1 开发,支持 Console、WinFrom、Wpf 等 Windows 应用。兼容 C#、Viural Basic 等.NET语言,集成方便快捷,能有效提高编程效率。详细请参阅:
【开源项目】Windows串口通信组件 -- Com.Gitusme.IO.Ports.SerialPort-CSDN博客
三、项目集成
方式1:管理NuGet程序包
选择项目,鼠标右键菜单选择 ”管理NuGet程序包“,搜索栏输入 ”Com.Gitusme.Net.Extensiones.Wpf“,点击 ”安装“ 或 ”更新“ 按钮,安装最新版本。
方式2:NuGet官网下载,本地添加依赖
https://www.nuget.org/packages/Com.Gitusme.Net.Extensiones.Wpf/
四、应用示例
4.1 Objet 类型转换
// Example 1: 判断对象是否为null
MyObject obj = null;
if (obj.IsNull())
{
System.Console.WriteLine("Example 1 输出结果:" + "null");
}
// Example 2: 对象为null的时候,返回传入的默认值
var def = obj.OrDefault(new MyObject());
System.Console.WriteLine("Example 2 输出结果:" + def);
// Example 3: 如果对象不为null,则执行传入的Action行为
def.IfPresent((it) =>
{
System.Console.WriteLine("Example 3 输出结果:" + it.Name);
});
// Example 4: 将Xml对象转换为Xml文本
var xmlObj = new MyXmlObject();
string xml = xmlObj.ToXml();
System.Console.WriteLine("Example 4 输出结果:" + xml);
// Example 5: 将Json对象转换为Json文本
var jsonObj = new MyJsonObject();
string json = jsonObj.ToJson();
System.Console.WriteLine("Example 5 输出结果:" + json);
4.2 String 类型转换
// Example 1: 判断string是否为null
string str = null;
if (str.IsNullOrEmpty())
{
System.Console.WriteLine("Example 1 输出结果:" + "null");
}
// Example 2: 判断string是否匹配正则
string hello = "Hello, gitusme";
var isMatch = hello.IsMatch(@"Hello, \w+");
System.Console.WriteLine("Example 2 输出结果:" + isMatch);
// Example 3: 将string转换为Json实体对象
string json = "{\"Id\":0,\"Name\":\"Json Object\"}";
var jsonObj = json.ToJsonObject<MyJsonObject>();
System.Console.WriteLine("Example 3 输出结果:" + jsonObj.Name);
// Example 4: 将string转换为Xml实体对象
string xml = "<?xml version=\"1.0\" encoding=\"utf-8\"?>" +
"<root xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" id=\"0\">" +
"<name>Xml Object</name>" +
"</root>";
var xmlObj = xml.ToXmlObject<MyXmlObject>();
System.Console.WriteLine("Example 4 输出结果:" + xmlObj.Name);
// Example 5: 将string转换为DateTime
string date = "2023/10/22 21:32:00";
var dateTime = date.ToDateTime();
System.Console.WriteLine("Example 5 输出结果:" + dateTime.ToString());
// Example 6: 将string转换为字符数组
string gitusme = "gitusme";
var array = gitusme.ToCharArray();
System.Console.WriteLine("Example 6 输出结果:" + array);
// Example 7: 将string转换为int32
string intStr = "100";
var intValue = intStr.ToInt32() + 10;
System.Console.WriteLine("Example 7 输出结果:" + intValue);
// Example 8: 将string转换为decimal
string decimalStr = "3.141592653589793238462643383279502884197";
var decimalValue = decimalStr.ToDecimal();
System.Console.WriteLine("Example 8 输出结果:" + decimalValue);
// Example 9: 将string转换为uri
string uriStr = "https://github.com/gitusme/Com.Gitusme.Net.Extensiones";
var uriValue = uriStr.ToUri();
System.Console.WriteLine("Example 9 输出结果:" + uriValue.Host);
// Example 10: 将string转换为color
string colorStr = "#aabbcc";
var colorValue = colorStr.ToColor();
System.Console.WriteLine("Example 10 输出结果:" + colorValue);
4.3 打印日志文件
internal class LoggerDemo : IExtensionesDemo
{
public override void Execute()
{
base.Execute();
var server = new MyServer();
server.Start("arg1", "arg2");
server.Stop();
}
}
class MyServer
{
public void Start(string arg1, string arg2)
{
this.Logi("MyServer", "Start:args={0},{1}", arg1, arg2);
}
public void Stop()
{
this.Logi("Stop.....");
}
}
4.4 基于命令模式的 Socket 套接字支持
Thread serverThread = new Thread(() =>
{
CommandFactory factory = new DefaultCommandFactory();
factory.AddUserCommand(new Server.ACK());
ISocketServerHandler server = SocketBuilder.Builder()
.CommandFactory(factory)
.AddListener(new ServerSocketListener())
.CreateServer("127.0.0.1", 8080, 5)
.StartListening();
});
serverThread.Start();
Thread clientThread = new Thread((clientId) =>
{
for(int i = 1; i <= 5; i++)
{
System.Console.WriteLine("==== times=" + i.ToString("D5"));
ISocketHandler client = SocketBuilder.Builder()
.AddListener(new ClientSocketListener())
.CreateClient("127.0.0.1", 8080)
.Open();
string tag = $"{clientId}";
CommandExecutor executor = new CommandExecutor(client);
ICommandResult ack = executor.Execute(new Client.ACK());
string ackResult = SocketSettings.Default.Encoding.GetString(ack.Get());
Console.WriteLine($"[{tag}] ACK Result: {ackResult}");
ICommandResult eom = executor.Execute(new Client.EOM());
string eomResult = SocketSettings.Default.Encoding.GetString(eom.Get());
Console.WriteLine($"[{tag}] EOM Result: {eomResult}");
client.Close();
Thread.Sleep(200);
System.Console.WriteLine();
}
System.Console.WriteLine("Exit = 0");
});
clientThread.Start($"CLIENT");
4.5 启动动画
protected override void OnStartup(StartupEventArgs e)
{
// 前提条件:需要删除XAML中的 StartupUri = "MainWindow.xaml"
this.StartSplashScreen(
$@"Resources\Images\SplashScreen.png",
() => {
// 在这里处理耗时任务或加载后台数据
Thread.Sleep(3000);
},
() => {
// 加载完成,后进入应用主界面
MainWindow mainWindow = new MainWindow();
App.Current.MainWindow = mainWindow;
mainWindow.Show();
},
(ex) => {
// 加载出错,向用户反馈或记录后台日志
MessageBox.Show(ex.Message);
});
}
4.6 多画面视频渲染
平铺模式
画廊模式
4.7 串口通信
SerialPort port1 = new SerialPort();
port1.Settings = new SerialPortSettings
{
BaudRate = 115200,
DataBits = 8,
Parity = Parity.None,
StopBits = 1,
Synchronizable = false
};
port1.Open("COM1");
SerialPort port2 = new SerialPort();
port2.Settings = new SerialPortSettings
{
BaudRate = 115200,
DataBits = 8,
Parity = Parity.None,
StopBits = 1,
Synchronizable = false
};
port2.Open("COM2");
string send = "Hello, gitusme!";
byte[] data = System.Text.Encoding.UTF8.GetBytes(send);
port1.Write(data);
byte[] rec = new byte[data.Length + 10000];
int read = port2.Read(rec);
string receive = System.Text.Encoding.UTF8.GetString(rec, 0, read);
port1.Close();
port2.Close();
五、项目地址
https://github.com/gitusme/Com.Gitusme.Net.Extensiones