using CapMachine.Wpf.Services; using System; using System.Windows; namespace CapMachine.Wpf.Views { /// /// Interaction logic for MainWindow.xaml /// public partial class MainView : Window { private readonly ZlgCanDriveService _zlgCanDriveService; private readonly ZlgLinDriveService _zlgLinDriveService; private readonly CanDriveService _canDriveService; private readonly LinDriveService _linDriveService; public MainView(ILogService logService, ZlgCanDriveService zlgCanDriveService, ZlgLinDriveService zlgLinDriveService, CanDriveService canDriveService, LinDriveService linDriveService) { InitializeComponent(); LogService = logService; _zlgCanDriveService = zlgCanDriveService; _zlgLinDriveService = zlgLinDriveService; _canDriveService = canDriveService; _linDriveService = linDriveService; } public ILogService LogService { get; } /// /// Windows状态 /// /// /// private void Window_StateChanged(object sender, EventArgs e) { LogService.Info($"Windows状态:{this.WindowState}-Visibility: {this.Visibility}"); } /// /// 主界面正要关闭 /// /// /// private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e) { // 弹窗提示是否确定要退出 MessageBoxResult result = MessageBox.Show("您确定要退出程序吗?", "提示", MessageBoxButton.OKCancel, MessageBoxImage.None, MessageBoxResult.Cancel); //System.Console.WriteLine(result); if (result == MessageBoxResult.Cancel) { e.Cancel = true; // 中断点击事件 } else { StopBusCommunicationOnExit(); LogService.Info("Windows关闭"); } } /// /// 软件退出时停止总线通信,防止适配器在进程退出后继续自动发送。 /// private void StopBusCommunicationOnExit() { StopZlgBusCommunicationOnExit(); StopToomossBusCommunicationOnExit(); } /// /// 停止 ZLG CAN/CANFD 与 LIN 通信。 /// private void StopZlgBusCommunicationOnExit() { try { if (_zlgLinDriveService.OpenState) { if (_zlgLinDriveService.IsCycleSend || _zlgLinDriveService.SchEnable) { _zlgLinDriveService.StopSchedule(); _zlgLinDriveService.IsCycleSend = false; } _zlgLinDriveService.CloseDevice(); LogService.Info("程序退出时已停止 ZLG LIN 调度/发送并关闭设备"); return; } if (_zlgCanDriveService.OpenState) { if (_zlgCanDriveService.IsCycleSend || _zlgCanDriveService.SchEnable) { _zlgCanDriveService.StopSchedule(); _zlgCanDriveService.IsCycleSend = false; } _zlgCanDriveService.CloseDevice(); LogService.Info("程序退出时已停止 ZLG CAN/CANFD 调度/发送并关闭设备"); } } catch (Exception ex) { LogService.Error($"程序退出停止 ZLG 总线失败:{ex.Message}"); } } /// /// 停止 Toomoss CAN 与 LIN 通信。 /// private void StopToomossBusCommunicationOnExit() { try { if (_linDriveService.ToomossLinDrive.OpenState) { if (_linDriveService.ToomossLinDrive.IsCycleSend) { _linDriveService.ToomossLinDrive.StopCycleSendMsg(); } if (_linDriveService.ToomossLinDrive.SchEnable) { _linDriveService.ToomossLinDrive.StopSchedule(); } _linDriveService.ToomossLinDrive.CloseDevice(); LogService.Info("程序退出时已停止 Toomoss LIN 调度/发送并关闭设备"); } } catch (Exception ex) { LogService.Error($"程序退出停止 Toomoss LIN 失败:{ex.Message}"); } try { if (_canDriveService.ToomossCanDrive.OpenState) { if (_canDriveService.ToomossCanDrive.IsCycleSend) { _canDriveService.ToomossCanDrive.StopCycleSendMsg(); } if (_canDriveService.ToomossCanDrive.SchEnable) { _canDriveService.ToomossCanDrive.StopSchedule(); } _canDriveService.ToomossCanDrive.CloseDevice(); LogService.Info("程序退出时已停止 Toomoss CAN 调度/发送并关闭设备"); } } catch (Exception ex) { LogService.Error($"程序退出停止 Toomoss CAN 失败:{ex.Message}"); } } /// /// 主界面完成关闭 /// /// /// private void Window_Closed(object sender, EventArgs e) { Environment.Exit(0); // 强制结束 } } }