现场查找程序崩溃问题1
This commit is contained in:
@@ -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()}");
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user