添加项目文件。
This commit is contained in:
69
Data/ModbusResourceManager.cs
Normal file
69
Data/ModbusResourceManager.cs
Normal file
@@ -0,0 +1,69 @@
|
||||
using System;
|
||||
using Modbus.Device;
|
||||
using System.Net.Sockets;
|
||||
|
||||
namespace 全自动水压检测仪.Data
|
||||
{
|
||||
// 单例模式:全局唯一资源管理器
|
||||
public class ModbusResourceManager
|
||||
{
|
||||
// 私有构造函数:禁止外部new
|
||||
private ModbusResourceManager() { }
|
||||
|
||||
// 唯一实例
|
||||
private static readonly Lazy<ModbusResourceManager> _instance = new Lazy<ModbusResourceManager>(() => new ModbusResourceManager());
|
||||
public static ModbusResourceManager Instance => _instance.Value;
|
||||
|
||||
// 共享资源
|
||||
public TcpClient TcpClient { get; private set; }
|
||||
public IModbusMaster ModbusMaster { get; private set; }
|
||||
|
||||
// 初始化资源(在程序启动时调用,如MainWindow加载时)
|
||||
public bool Init(string ip, int port)
|
||||
{
|
||||
try
|
||||
{
|
||||
// 先释放旧资源
|
||||
ReleaseResource();
|
||||
|
||||
// 创建新连接
|
||||
TcpClient = new TcpClient();
|
||||
TcpClient.Connect(ip, port);
|
||||
ModbusMaster = ModbusIpMaster.CreateIp(TcpClient);
|
||||
return true;
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Console.WriteLine($"资源初始化失败:{ex.Message}");
|
||||
ReleaseResource();
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
public void Dispose()
|
||||
{
|
||||
try
|
||||
{
|
||||
ModbusMaster?.Dispose();
|
||||
TcpClient?.Close();
|
||||
}
|
||||
catch
|
||||
{
|
||||
// 忽略清理时的异常
|
||||
}
|
||||
}
|
||||
// 释放资源(统一释放,避免重复关闭)
|
||||
public void ReleaseResource()
|
||||
{
|
||||
ModbusMaster?.Dispose();
|
||||
ModbusMaster = null;
|
||||
|
||||
//if (TcpClient?.Connected ?? false)
|
||||
//{
|
||||
// TcpClient.Close();
|
||||
//}
|
||||
TcpClient?.Dispose();
|
||||
TcpClient = null;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user