现场查找程序崩溃问题1
This commit is contained in:
@@ -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()}");
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|||||||
@@ -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>
|
||||||
@@ -55,6 +62,9 @@ namespace CapMachine.Wpf.Services
|
|||||||
/// 初始化CAN的配置信息
|
/// 初始化CAN的配置信息
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public void InitCanConfig(CanLinConfigPro selectedCanLinConfigPro)
|
public void InitCanConfig(CanLinConfigPro selectedCanLinConfigPro)
|
||||||
|
{
|
||||||
|
_dbcModelLock.EnterWriteLock();
|
||||||
|
try
|
||||||
{
|
{
|
||||||
//赋值配置数据
|
//赋值配置数据
|
||||||
SelectedCanLinConfigPro = selectedCanLinConfigPro;
|
SelectedCanLinConfigPro = selectedCanLinConfigPro;
|
||||||
@@ -68,6 +78,11 @@ namespace CapMachine.Wpf.Services
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
finally
|
||||||
|
{
|
||||||
|
_dbcModelLock.ExitWriteLock();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 开始DBC 配置文件 加载
|
/// 开始DBC 配置文件 加载
|
||||||
@@ -226,6 +241,9 @@ namespace CapMachine.Wpf.Services
|
|||||||
if (ToomossCanDrive.OpenState)
|
if (ToomossCanDrive.OpenState)
|
||||||
{
|
{
|
||||||
if (ToomossCanDrive.IsCycleRevice == false)
|
if (ToomossCanDrive.IsCycleRevice == false)
|
||||||
|
{
|
||||||
|
_dbcModelLock.EnterReadLock();
|
||||||
|
try
|
||||||
{
|
{
|
||||||
if (ListCanDbcModel.Count > 0)
|
if (ListCanDbcModel.Count > 0)
|
||||||
{
|
{
|
||||||
@@ -237,6 +255,11 @@ namespace CapMachine.Wpf.Services
|
|||||||
System.Windows.MessageBox.Show("未发现配置的数据内容", "提示", System.Windows.MessageBoxButton.OK, System.Windows.MessageBoxImage.Hand);
|
System.Windows.MessageBox.Show("未发现配置的数据内容", "提示", System.Windows.MessageBoxButton.OK, System.Windows.MessageBoxImage.Hand);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
finally
|
||||||
|
{
|
||||||
|
_dbcModelLock.ExitReadLock();
|
||||||
|
}
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
ToomossCanDrive.IsCycleRevice = false;
|
ToomossCanDrive.IsCycleRevice = false;
|
||||||
@@ -255,11 +278,19 @@ namespace CapMachine.Wpf.Services
|
|||||||
{
|
{
|
||||||
if (!ToomossCanDrive.IsCycleRevice) return 0;
|
if (!ToomossCanDrive.IsCycleRevice) return 0;
|
||||||
|
|
||||||
|
_dbcModelLock.EnterReadLock();
|
||||||
|
try
|
||||||
|
{
|
||||||
if (ListCanDbcModel.Any(a => a.Name == Name))
|
if (ListCanDbcModel.Any(a => a.Name == Name))
|
||||||
{
|
{
|
||||||
//double.TryParse(ListCanDbcModel.FindFirst(a => a.Name == Name).SignalRtValue, out double Result1);
|
//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;
|
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,11 +305,19 @@ namespace CapMachine.Wpf.Services
|
|||||||
{
|
{
|
||||||
if (!ToomossCanDrive.IsCycleRevice) return 0;
|
if (!ToomossCanDrive.IsCycleRevice) return 0;
|
||||||
|
|
||||||
|
_dbcModelLock.EnterReadLock();
|
||||||
|
try
|
||||||
|
{
|
||||||
if (ListCanDbcModel.Any(a => a.Name == Name))
|
if (ListCanDbcModel.Any(a => a.Name == Name))
|
||||||
{
|
{
|
||||||
//double.TryParse(ListCanDbcModel.FindFirst(a => a.Name == Name).SignalRtValue, out double Result1);
|
//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;
|
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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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,9 +431,16 @@ 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);
|
||||||
//恢复状态
|
//恢复状态
|
||||||
|
try
|
||||||
|
{
|
||||||
IsCanConfigProActive = false;
|
IsCanConfigProActive = false;
|
||||||
IsCANConfigDatagridActive = true;
|
IsCANConfigDatagridActive = true;
|
||||||
}
|
}
|
||||||
|
catch (Exception restoreEx)
|
||||||
|
{
|
||||||
|
LogService.Error($"恢复状态失败: {restoreEx.Message}");
|
||||||
|
}
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
|
|||||||
Reference in New Issue
Block a user