change-优化异常处理

dev
liuwf 3 months ago
parent 05657d77ba
commit 1aff8cbc77

@ -14,6 +14,7 @@ using System.Text;
using SlnMesnac.Common;
using System.Net.NetworkInformation;
using System.Linq;
using System.Threading.Tasks;
namespace SlnMesnac.WPF
{
@ -30,6 +31,15 @@ namespace SlnMesnac.WPF
protected override async void OnStartup(StartupEventArgs e)
{
//UI线程未捕获异常处理事件UI主线程
this.DispatcherUnhandledException += App_DispatcherUnhandledException;
//非UI线程未捕获异常处理事件(例如自己创建的一个子线程)
AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException;
//Task线程内未捕获异常处理事件
TaskScheduler.UnobservedTaskException += TaskScheduler_UnobservedTaskException;//Task异常
bool ret;
mutex = new System.Threading.Mutex(true, System.Diagnostics.Process.GetCurrentProcess().ProcessName, out ret);
if (!ret)
@ -69,7 +79,65 @@ namespace SlnMesnac.WPF
Console.WriteLine(e.Exception.Message);
}
void App_DispatcherUnhandledException(object sender, System.Windows.Threading.DispatcherUnhandledExceptionEventArgs e)
{
try
{
HandleException(e.Exception);
}
catch (Exception ex)
{
HandleException(ex);
}
finally
{
e.Handled = true;
}
}
private static void HandleException(Exception ex)
{
Log.Warning($"全局异常捕获处理: {ex.Message}");
}
//非UI线程未捕获异常处理事件(例如自己创建的一个子线程)
private static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
{
try
{
var exception = e.ExceptionObject as Exception;
if (exception != null)
{
HandleException(exception);
}
}
catch (Exception ex)
{
HandleException(ex);
}
finally
{
//ignore
}
}
private static void TaskScheduler_UnobservedTaskException(object sender, UnobservedTaskExceptionEventArgs e)
{
try
{
var exception = e.Exception as Exception;
if (exception != null)
{
HandleException(exception);
}
}
catch (Exception ex)
{
HandleException(ex);
}
finally
{
e.SetObserved();
}
}

@ -295,58 +295,61 @@ namespace SlnMesnac.WPF.ViewModel
/// 刷新生产计划
/// </summary>
/// <param name="list"></param>
private void RefreshPlanDataGrid(List<MesProductPlanDto> list)
private async void RefreshPlanDataGrid(List<MesProductPlanDto> list)
{
try
{
PlanInfoDataGrid = new ObservableCollection<MesProductPlanDto>();
if (list != null)
await App.Current.Dispatcher.BeginInvoke((Action)(() =>
{
#region 按钮状态
// 假设初始状态所有计划的按钮状态
list.ForEach(plan =>
PlanInfoDataGrid = new ObservableCollection<MesProductPlanDto>();
if (list != null)
{
plan.StartEnable = true;
plan.StopEnable = false;
});
#region 按钮状态
// 假设初始状态所有计划的按钮状态
list.ForEach(plan =>
{
plan.StartEnable = true;
plan.StopEnable = false;
});
// 查找是否存在正在执行的计划
var executingPlan = list.FirstOrDefault(x => x.PlanStatus == PlanStatusEnum.);
if (executingPlan != null)
{
// 如果有正在执行的计划,只有该计划的暂停按钮可以点击,其他计划的按钮都不能点击
foreach (var plan in list)
// 查找是否存在正在执行的计划
var executingPlan = list.FirstOrDefault(x => x.PlanStatus == PlanStatusEnum.);
if (executingPlan != null)
{
if (plan == executingPlan)
// 如果有正在执行的计划,只有该计划的暂停按钮可以点击,其他计划的按钮都不能点击
foreach (var plan in list)
{
plan.StopEnable = true; // 执行中的计划可以暂停
plan.StartEnable = false;
}
else
{
plan.StartEnable = false; // 其他计划不能开始
if (plan == executingPlan)
{
plan.StopEnable = true; // 执行中的计划可以暂停
plan.StartEnable = false;
}
else
{
plan.StartEnable = false; // 其他计划不能开始
}
}
}
}
#endregion
#endregion
list.OrderByDescending(x => x.PlanStatus);
list.ForEach(
arg =>
{
PlanInfoDataGrid.Add(arg);
});
list.OrderByDescending(x => x.PlanStatus);
list.ForEach(
arg =>
{
PlanInfoDataGrid.Add(arg);
});
var info = list.Where(x => x.PlanStatus == PlanStatusEnum.).ToList();
if (info.Count > 0)
{
RefreshPlanExec(info.First());
}
var info = list.Where(x => x.PlanStatus == PlanStatusEnum.).ToList();
if (info.Count > 0)
{
RefreshPlanExec(info.First());
}
}
}));
}
catch (Exception ex)
{

Loading…
Cancel
Save