现场查找程序崩溃问题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 = ContainerLocator.Container.Resolve<ILogService>();
LogService.Error("Start-->OnInitialized"); LogService.Info("程序启动");
base.OnInitialized(); base.OnInitialized();
//#endregion //#endregion
@@ -289,7 +289,7 @@ namespace CapMachine.Wpf
void App_Exit(object sender, ExitEventArgs e) void App_Exit(object sender, ExitEventArgs e)
{ {
//程序退出时需要处理的业务 //程序退出时需要处理的业务
LogService.Error("程序退出"); LogService.Info("App-程序退出");
} }
@@ -304,12 +304,14 @@ namespace CapMachine.Wpf
try try
{ {
HandleException(e.Exception); HandleException(e.Exception);
MessageBox.Show("UI线程异常:" + e.Exception.Message); //MessageBox.Show("UI线程异常:" + e.Exception.Message);
LogService.Error("UI线程异常:" + e.Exception.Message);
} }
catch (Exception ex) catch (Exception ex)
{ {
HandleException(ex); HandleException(ex);
MessageBox.Show("UI线程发生致命错误"); //MessageBox.Show("UI线程发生致命错误");
LogService.Error("UI线程发生致命错误");
} }
finally finally
{ {
@@ -346,8 +348,8 @@ namespace CapMachine.Wpf
{ {
sbEx.Append(e.ExceptionObject); sbEx.Append(e.ExceptionObject);
} }
MessageBox.Show(sbEx.ToString()); //MessageBox.Show(sbEx.ToString());
LogService.Error(sbEx.ToString());
} }
} }
catch (Exception ex) catch (Exception ex)
@@ -374,7 +376,8 @@ namespace CapMachine.Wpf
{ {
HandleException(exception); HandleException(exception);
//task线程内未处理捕获 //task线程内未处理捕获
MessageBox.Show("Task线程异常" + e.Exception.Message); //MessageBox.Show("Task线程异常" + e.Exception.Message);
LogService.Error($"Task线程异常");
} }
} }
catch (Exception ex) catch (Exception ex)
@@ -395,7 +398,7 @@ namespace CapMachine.Wpf
private void HandleException(Exception ex) 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\favicon.ico" />
<None Remove="Assets\Images\Logo.png" /> <None Remove="Assets\Images\Logo.png" />
<None Remove="Assets\Images\参考工艺图.png" /> <None Remove="Assets\Images\参考工艺图.png" />
<None Remove="NLog.config" />
<None Remove="PPCalculation\REFPROP\FLUIDS\13BUTADIENE.FLD" /> <None Remove="PPCalculation\REFPROP\FLUIDS\13BUTADIENE.FLD" />
<None Remove="PPCalculation\REFPROP\FLUIDS\1BUTENE.FLD" /> <None Remove="PPCalculation\REFPROP\FLUIDS\1BUTENE.FLD" />
<None Remove="PPCalculation\REFPROP\FLUIDS\1BUTYNE.FLD" /> <None Remove="PPCalculation\REFPROP\FLUIDS\1BUTYNE.FLD" />
@@ -184,6 +185,9 @@
<Content Include="Assets\Images\Logo.png"> <Content Include="Assets\Images\Logo.png">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content> </Content>
<Content Include="NLog.config">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="PPCalculation\REFPROP\FLUIDS\13BUTADIENE.FLD"> <Content Include="PPCalculation\REFPROP\FLUIDS\13BUTADIENE.FLD">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content> </Content>

View File

@@ -9,6 +9,7 @@ using System.Collections.Generic;
using System.Collections.ObjectModel; using System.Collections.ObjectModel;
using System.Linq; using System.Linq;
using System.Text; using System.Text;
using System.Threading;
using System.Threading.Tasks; using System.Threading.Tasks;
namespace CapMachine.Wpf.Services namespace CapMachine.Wpf.Services
@@ -21,6 +22,12 @@ namespace CapMachine.Wpf.Services
public HighSpeedDataService HighSpeedDataService { get; } public HighSpeedDataService HighSpeedDataService { get; }
/// <summary>
/// 读写锁,用于保护 ListCanDbcModel 的并发访问
/// 支持多个读取操作同时进行,写入操作独占
/// </summary>
private readonly ReaderWriterLockSlim _dbcModelLock = new ReaderWriterLockSlim();
/// <summary> /// <summary>
/// 实例化函数 /// 实例化函数
/// </summary> /// </summary>
@@ -56,17 +63,25 @@ namespace CapMachine.Wpf.Services
/// </summary> /// </summary>
public void InitCanConfig(CanLinConfigPro selectedCanLinConfigPro) public void InitCanConfig(CanLinConfigPro selectedCanLinConfigPro)
{ {
//赋值配置数据 _dbcModelLock.EnterWriteLock();
SelectedCanLinConfigPro = selectedCanLinConfigPro; try
//为DBC实时数据关联配置的名称
foreach (var item in SelectedCanLinConfigPro.CanLinConfigContents)
{ {
var FindData = ListCanDbcModel.FindFirst(a => a.SignalName == item.SignalName); //赋值配置数据
if (FindData != null) SelectedCanLinConfigPro = selectedCanLinConfigPro;
//为DBC实时数据关联配置的名称
foreach (var item in SelectedCanLinConfigPro.CanLinConfigContents)
{ {
FindData.Name = item.Name; var FindData = ListCanDbcModel.FindFirst(a => a.SignalName == item.SignalName);
if (FindData != null)
{
FindData.Name = item.Name;
}
} }
} }
finally
{
_dbcModelLock.ExitWriteLock();
}
} }
/// <summary> /// <summary>
@@ -227,14 +242,22 @@ namespace CapMachine.Wpf.Services
{ {
if (ToomossCanDrive.IsCycleRevice == false) if (ToomossCanDrive.IsCycleRevice == false)
{ {
if (ListCanDbcModel.Count > 0) _dbcModelLock.EnterReadLock();
try
{ {
ToomossCanDrive.IsCycleRevice = true; if (ListCanDbcModel.Count > 0)
ToomossCanDrive.StartPrecisionCycleSendMsg(); {
ToomossCanDrive.IsCycleRevice = true;
ToomossCanDrive.StartPrecisionCycleSendMsg();
}
else
{
System.Windows.MessageBox.Show("未发现配置的数据内容", "提示", System.Windows.MessageBoxButton.OK, System.Windows.MessageBoxImage.Hand);
}
} }
else finally
{ {
System.Windows.MessageBox.Show("未发现配置的数据内容", "提示", System.Windows.MessageBoxButton.OK, System.Windows.MessageBoxImage.Hand); _dbcModelLock.ExitReadLock();
} }
} }
else else
@@ -255,10 +278,18 @@ namespace CapMachine.Wpf.Services
{ {
if (!ToomossCanDrive.IsCycleRevice) return 0; if (!ToomossCanDrive.IsCycleRevice) return 0;
if (ListCanDbcModel.Any(a => a.Name == Name)) _dbcModelLock.EnterReadLock();
try
{ {
//double.TryParse(ListCanDbcModel.FindFirst(a => a.Name == Name).SignalRtValue, out double Result1); if (ListCanDbcModel.Any(a => a.Name == Name))
return double.TryParse(ListCanDbcModel.FindFirst(a => a.Name == Name).SignalRtValue.Split(" ")[0], out double Result) == true ? Result : 0; {
//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; return 0;
} }
@@ -274,10 +305,18 @@ namespace CapMachine.Wpf.Services
{ {
if (!ToomossCanDrive.IsCycleRevice) return 0; if (!ToomossCanDrive.IsCycleRevice) return 0;
if (ListCanDbcModel.Any(a => a.Name == Name)) _dbcModelLock.EnterReadLock();
try
{ {
//double.TryParse(ListCanDbcModel.FindFirst(a => a.Name == Name).SignalRtValue, out double Result1); if (ListCanDbcModel.Any(a => a.Name == Name))
return double.TryParse(ListCanDbcModel.FindFirst(a => a.Name == Name).SignalRtValue.Split(" ")[0], out double Result) == true ? Result : 0; {
//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; return 0;
} }

View File

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