修改退出时关闭所有服务和连接
This commit is contained in:
@@ -9,7 +9,7 @@ namespace DMS.Infrastructure.Interfaces.Services
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// MQTT后台服务接口,负责管理MQTT连接和数据传输
|
/// MQTT后台服务接口,负责管理MQTT连接和数据传输
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public interface IMqttBackgroundService
|
public interface IMqttBackgroundService : IDisposable
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 启动MQTT后台服务
|
/// 启动MQTT后台服务
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ namespace DMS.Infrastructure.Interfaces.Services
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// MQTT服务管理器接口,负责管理MQTT连接和变量监控
|
/// MQTT服务管理器接口,负责管理MQTT连接和变量监控
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public interface IMqttServiceManager
|
public interface IMqttServiceManager : IDisposable
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 初始化服务管理器
|
/// 初始化服务管理器
|
||||||
|
|||||||
@@ -243,5 +243,20 @@ namespace DMS.Infrastructure.Services
|
|||||||
_logger.LogInformation("MQTT列表发生了变化,正在重新加载数据...");
|
_logger.LogInformation("MQTT列表发生了变化,正在重新加载数据...");
|
||||||
_reloadSemaphore.Release();
|
_reloadSemaphore.Release();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 释放资源
|
||||||
|
/// </summary>
|
||||||
|
public override void Dispose()
|
||||||
|
{
|
||||||
|
_logger.LogInformation("正在释放MQTT后台服务资源...");
|
||||||
|
|
||||||
|
_dataCenterService.OnLoadDataCompleted -= OnLoadDataCompleted;
|
||||||
|
_reloadSemaphore?.Dispose();
|
||||||
|
|
||||||
|
base.Dispose();
|
||||||
|
|
||||||
|
_logger.LogInformation("MQTT后台服务资源已释放");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -39,6 +39,7 @@ public partial class App : System.Windows.Application
|
|||||||
public IServiceProvider Services { get; }
|
public IServiceProvider Services { get; }
|
||||||
public new static App Current => (App)System.Windows.Application.Current;
|
public new static App Current => (App)System.Windows.Application.Current;
|
||||||
public IHost Host { get; }
|
public IHost Host { get; }
|
||||||
|
private readonly ILogger<App> _logger;
|
||||||
|
|
||||||
public App()
|
public App()
|
||||||
{
|
{
|
||||||
@@ -53,6 +54,7 @@ public partial class App : System.Windows.Application
|
|||||||
})
|
})
|
||||||
.Build();
|
.Build();
|
||||||
Services = Host.Services;
|
Services = Host.Services;
|
||||||
|
_logger = Host.Services.GetRequiredService<ILogger<App>>();
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override async void OnStartup(StartupEventArgs e)
|
protected override async void OnStartup(StartupEventArgs e)
|
||||||
@@ -86,10 +88,60 @@ public partial class App : System.Windows.Application
|
|||||||
|
|
||||||
protected override async void OnExit(ExitEventArgs e)
|
protected override async void OnExit(ExitEventArgs e)
|
||||||
{
|
{
|
||||||
// 停止服务
|
_logger.LogInformation("应用程序正在关闭,开始清理资源...");
|
||||||
await Host.StopAsync();
|
|
||||||
Host.Dispose();
|
try
|
||||||
LogManager.Shutdown();
|
{
|
||||||
|
// 获取服务管理器
|
||||||
|
var opcUaServiceManager = Host.Services.GetService<IOpcUaServiceManager>();
|
||||||
|
var s7ServiceManager = Host.Services.GetService<IS7ServiceManager>();
|
||||||
|
var mqttServiceManager = Host.Services.GetService<IMqttServiceManager>();
|
||||||
|
|
||||||
|
// 优雅地关闭OPC UA服务
|
||||||
|
if (opcUaServiceManager != null)
|
||||||
|
{
|
||||||
|
_logger.LogInformation("正在关闭OPC UA服务...");
|
||||||
|
opcUaServiceManager.Dispose();
|
||||||
|
_logger.LogInformation("OPC UA服务已关闭");
|
||||||
|
}
|
||||||
|
|
||||||
|
// 优雅地关闭S7服务
|
||||||
|
if (s7ServiceManager != null)
|
||||||
|
{
|
||||||
|
_logger.LogInformation("正在关闭S7服务...");
|
||||||
|
s7ServiceManager.Dispose();
|
||||||
|
_logger.LogInformation("S7服务已关闭");
|
||||||
|
}
|
||||||
|
|
||||||
|
// 优雅地关闭MQTT服务
|
||||||
|
if (mqttServiceManager != null)
|
||||||
|
{
|
||||||
|
_logger.LogInformation("正在关闭MQTT服务...");
|
||||||
|
mqttServiceManager.Dispose();
|
||||||
|
_logger.LogInformation("MQTT服务已关闭");
|
||||||
|
}
|
||||||
|
|
||||||
|
// 停止后台服务
|
||||||
|
_logger.LogInformation("正在停止后台服务...");
|
||||||
|
await Host.StopAsync();
|
||||||
|
_logger.LogInformation("后台服务已停止");
|
||||||
|
|
||||||
|
// 释放Host资源
|
||||||
|
_logger.LogInformation("正在释放Host资源...");
|
||||||
|
Host.Dispose();
|
||||||
|
_logger.LogInformation("Host资源已释放");
|
||||||
|
|
||||||
|
// 关闭NLog
|
||||||
|
_logger.LogInformation("正在关闭NLog...");
|
||||||
|
LogManager.Shutdown();
|
||||||
|
_logger.LogInformation("NLog已关闭");
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
_logger.LogError(ex, "关闭应用程序时发生错误: {ErrorMessage}", ex.Message);
|
||||||
|
}
|
||||||
|
|
||||||
|
_logger.LogInformation("应用程序已完全关闭");
|
||||||
base.OnExit(e);
|
base.OnExit(e);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user