现场查找程序崩溃问题1

This commit is contained in:
2026-05-14 11:07:57 +08:00
parent 4cdda056b4
commit 1dfcf5f77a
4 changed files with 90 additions and 28 deletions

View File

@@ -261,7 +261,7 @@ namespace CapMachine.Wpf
//给当前的全局异常捕捉服务使用
LogService = ContainerLocator.Container.Resolve<ILogService>();
LogService.Error("Start-->OnInitialized");
LogService.Info("程序启动");
base.OnInitialized();
//#endregion
@@ -289,7 +289,7 @@ namespace CapMachine.Wpf
void App_Exit(object sender, ExitEventArgs e)
{
//程序退出时需要处理的业务
LogService.Error("程序退出");
LogService.Info("App-程序退出");
}
@@ -304,12 +304,14 @@ namespace CapMachine.Wpf
try
{
HandleException(e.Exception);
MessageBox.Show("UI线程异常:" + e.Exception.Message);
//MessageBox.Show("UI线程异常:" + e.Exception.Message);
LogService.Error("UI线程异常:" + e.Exception.Message);
}
catch (Exception ex)
{
HandleException(ex);
MessageBox.Show("UI线程发生致命错误");
//MessageBox.Show("UI线程发生致命错误");
LogService.Error("UI线程发生致命错误");
}
finally
{
@@ -346,8 +348,8 @@ namespace CapMachine.Wpf
{
sbEx.Append(e.ExceptionObject);
}
MessageBox.Show(sbEx.ToString());
//MessageBox.Show(sbEx.ToString());
LogService.Error(sbEx.ToString());
}
}
catch (Exception ex)
@@ -374,7 +376,8 @@ namespace CapMachine.Wpf
{
HandleException(exception);
//task线程内未处理捕获
MessageBox.Show("Task线程异常" + e.Exception.Message);
//MessageBox.Show("Task线程异常" + e.Exception.Message);
LogService.Error($"Task线程异常");
}
}
catch (Exception ex)
@@ -395,7 +398,7 @@ namespace CapMachine.Wpf
private void HandleException(Exception ex)
{
//记录日志
LogService.Error(ex.ToString());
LogService.Error($"App捕捉HandleException-{ex.ToString()}");
}

View File

@@ -15,6 +15,7 @@
<None Remove="Assets\Images\favicon.ico" />
<None Remove="Assets\Images\Logo.png" />
<None Remove="Assets\Images\参考工艺图.png" />
<None Remove="NLog.config" />
<None Remove="PPCalculation\REFPROP\FLUIDS\13BUTADIENE.FLD" />
<None Remove="PPCalculation\REFPROP\FLUIDS\1BUTENE.FLD" />
<None Remove="PPCalculation\REFPROP\FLUIDS\1BUTYNE.FLD" />
@@ -184,6 +185,9 @@
<Content Include="Assets\Images\Logo.png">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="NLog.config">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="PPCalculation\REFPROP\FLUIDS\13BUTADIENE.FLD">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>

View File

@@ -9,6 +9,7 @@ using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
namespace CapMachine.Wpf.Services
@@ -21,6 +22,12 @@ namespace CapMachine.Wpf.Services
public HighSpeedDataService HighSpeedDataService { get; }
/// <summary>
/// 读写锁,用于保护 ListCanDbcModel 的并发访问
/// 支持多个读取操作同时进行,写入操作独占
/// </summary>
private readonly ReaderWriterLockSlim _dbcModelLock = new ReaderWriterLockSlim();
/// <summary>
/// 实例化函数
/// </summary>
@@ -55,6 +62,9 @@ namespace CapMachine.Wpf.Services
/// 初始化CAN的配置信息
/// </summary>
public void InitCanConfig(CanLinConfigPro selectedCanLinConfigPro)
{
_dbcModelLock.EnterWriteLock();
try
{
//赋值配置数据
SelectedCanLinConfigPro = selectedCanLinConfigPro;
@@ -68,6 +78,11 @@ namespace CapMachine.Wpf.Services
}
}
}
finally
{
_dbcModelLock.ExitWriteLock();
}
}
/// <summary>
/// 开始DBC 配置文件 加载
@@ -226,6 +241,9 @@ namespace CapMachine.Wpf.Services
if (ToomossCanDrive.OpenState)
{
if (ToomossCanDrive.IsCycleRevice == false)
{
_dbcModelLock.EnterReadLock();
try
{
if (ListCanDbcModel.Count > 0)
{
@@ -237,6 +255,11 @@ namespace CapMachine.Wpf.Services
System.Windows.MessageBox.Show("未发现配置的数据内容", "提示", System.Windows.MessageBoxButton.OK, System.Windows.MessageBoxImage.Hand);
}
}
finally
{
_dbcModelLock.ExitReadLock();
}
}
else
{
ToomossCanDrive.IsCycleRevice = false;
@@ -255,11 +278,19 @@ namespace CapMachine.Wpf.Services
{
if (!ToomossCanDrive.IsCycleRevice) return 0;
_dbcModelLock.EnterReadLock();
try
{
if (ListCanDbcModel.Any(a => a.Name == Name))
{
//double.TryParse(ListCanDbcModel.FindFirst(a => a.Name == Name).SignalRtValue, out double Result1);
return double.TryParse(ListCanDbcModel.FindFirst(a => a.Name == Name).SignalRtValue.Split(" ")[0], out double Result) == true ? Result : 0;
}
}
finally
{
_dbcModelLock.ExitReadLock();
}
return 0;
}
@@ -274,11 +305,19 @@ namespace CapMachine.Wpf.Services
{
if (!ToomossCanDrive.IsCycleRevice) return 0;
_dbcModelLock.EnterReadLock();
try
{
if (ListCanDbcModel.Any(a => a.Name == Name))
{
//double.TryParse(ListCanDbcModel.FindFirst(a => a.Name == Name).SignalRtValue, out double Result1);
return double.TryParse(ListCanDbcModel.FindFirst(a => a.Name == Name).SignalRtValue.Split(" ")[0], out double Result) == true ? Result : 0;
}
}
finally
{
_dbcModelLock.ExitReadLock();
}
return 0;
}

View File

@@ -382,10 +382,13 @@ namespace CapMachine.Wpf.ViewModels
//激活到取消的状态的判断
if (IsCanConfigProActive == true)
{
LogService.Info("准备取消激活状态");
//控件的激活
IsCanConfigProActive = !IsCanConfigProActive;
LogService.Info("IsCanConfigProActive已更新");
//控件的激活配置信息
IsCANConfigDatagridActive = !IsCanConfigProActive;
LogService.Info("IsCANConfigDatagridActive已更新");
LogService.Info("CAN配置已取消激活");
return;
@@ -395,14 +398,20 @@ namespace CapMachine.Wpf.ViewModels
{
if (SelectCanLinConfigPro != null)
{
LogService.Info($"准备激活配置: {SelectCanLinConfigPro.ConfigName}");
//控件的激活
IsCanConfigProActive = !IsCanConfigProActive;
LogService.Info("IsCanConfigProActive已更新为true");
//控件的激活配置信息
IsCANConfigDatagridActive = !IsCanConfigProActive;
LogService.Info("IsCANConfigDatagridActive已更新");
//当前使用的CAN 配置信息
LogService.Info("开始调用InitCanConfig");
CanDriveService.InitCanConfig(SelectCanLinConfigPro);
LogService.Info("InitCanConfig完成");
LogService.Info("开始调用InitLoadCanConfigPro");
InitLoadCanConfigPro();
LogService.Info($"CAN配置激活成功: {SelectCanLinConfigPro.ConfigName}");
}
@@ -422,9 +431,16 @@ namespace CapMachine.Wpf.ViewModels
LogService.Error($"CAN配置激活操作失败: {ex.Message}\r\n堆栈: {ex.StackTrace}");
System.Windows.MessageBox.Show($"CAN配置激活操作失败: {ex.Message}", "错误", System.Windows.MessageBoxButton.OK, System.Windows.MessageBoxImage.Error);
//恢复状态
try
{
IsCanConfigProActive = false;
IsCANConfigDatagridActive = true;
}
catch (Exception restoreEx)
{
LogService.Error($"恢复状态失败: {restoreEx.Message}");
}
}
break;
default:
break;