This commit is contained in:
2024-12-18 15:50:21 +08:00
parent 684973e6b7
commit b2c54119ea
214 changed files with 65908 additions and 8461 deletions

View File

@@ -2,14 +2,20 @@
using CapMachine.Core;
using CapMachine.Core.IService;
using CapMachine.Wpf.MapperProfile;
using CapMachine.Wpf.Models;
using CapMachine.Wpf.Services;
using CapMachine.Wpf.ViewModels;
using CapMachine.Wpf.Views;
using FreeSql;
using FreeSql.Internal;
using Prism.DryIoc;
using Prism.Ioc;
using Prism.Regions;
using System.Globalization;
using System.Text;
using System.Threading;
using System.Windows;
using System.Windows.Threading;
namespace CapMachine.Wpf
{
@@ -18,6 +24,13 @@ namespace CapMachine.Wpf
/// </summary>
public partial class App : PrismApplication
{
/// <summary>
/// 日志服务
/// </summary>
private ILogService LogService { get; set; }
private static System.Threading.Mutex mutex;
public App()
{
try
@@ -25,12 +38,14 @@ namespace CapMachine.Wpf
//24.2.7
//Syncfusion.SfSkinManager.SfSkinManager.ApplyStylesOnApplication = true;
Syncfusion.Licensing.SyncfusionLicenseProvider.RegisterLicense("MzEyMzM3NkAzMjM0MmUzMDJlMzBHdjVKNUNpNWZxYXQwR05ZbVYvUEtzbGxXMnVxRjYvRGtLSlZUOGpjQW44PQ==");
//System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo("zh-CN");
// 授权 a717c797-59e3-48de-b6b4-574a4e03dc79
if (!HslCommunication.Authorization.SetAuthorizationCode("a717c797-59e3-48de-b6b4-574a4e03dc79"))
if (!HslCommunication.Authorization.SetAuthorizationCode("b23b00e2-ce46-4bfc-b33c-71c47c2c11c2"))
{
//active failed
//MessageBox.Show("授权失败当前程序只能使用8小时");
MessageBox.Show("授权失败当前程序只能使用8小时");
//return;
}
@@ -48,19 +63,40 @@ namespace CapMachine.Wpf
}
}
protected override Window CreateShell() => null;
protected override void OnStartup(StartupEventArgs e)
{
//首先注册开始和退出事件
this.Startup += new StartupEventHandler(App_Startup);
this.Exit += new ExitEventHandler(App_Exit);
mutex = new System.Threading.Mutex(true, "OnlyRun_CRNS");
if (mutex.WaitOne(0, false))
{
base.OnStartup(e);
}
else
{
MessageBox.Show("程序已经在运行!", "提示");
this.Shutdown();
}
//base.OnStartup(e);
}
protected override Window CreateShell() => null;
protected override void RegisterTypes(IContainerRegistry containerRegistry)
{
////注册日志服务
containerRegistry.RegisterSingleton<ILogService, LogService>();
containerRegistry.RegisterSingleton<SysService>();
containerRegistry.RegisterSingleton<SysRunService>();
containerRegistry.RegisterSingleton<ConfigService>();
////注册设备服务
//containerRegistry.RegisterSingleton<MachineDataService>();
containerRegistry.RegisterSingleton<MachineRtDataService>();
containerRegistry.RegisterSingleton<DataRecordService>();
containerRegistry.RegisterSingleton<CanDriveService>();
//注册AutoMapper 将IAutoMapperProvider注入IOC容器并对外提供IMapper注入类型。
containerRegistry.RegisterSingleton<IMapperProvider, MapperConfig>();
@@ -72,6 +108,10 @@ namespace CapMachine.Wpf
var Con = ConfigHelper.GetValue("connecting5").Replace("@Address@", strsqllite);
var LocalDb = @"Data Source=(localdb)\MSSQLLocalDB;AttachDbFilename=@Address@.mdf;Integrated Security=True;Connect Timeout=30;";
var LocalDbStr = LocalDb.Replace("@Address@", strslocaldb);
var LocalDbDir = @"Data Source=(localdb)\MSSQLLocalDB;Integrated Security=True;Connect Timeout=30;";
//var LocalDbFath= @"Data Source=(localdb)\MSSQLLocalDB;AttachDbFilename=@Address@.mdf;Integrated Security=True;Connect Timeout=30;".Replace("@Address@", ConfigHelper.GetValue("LocalDBPath"));
var Constr = ConfigHelper.GetValue("connecting");
//注册IFreeSql实例 单例
containerRegistry.RegisterSingleton<IFreeSql>(() =>
@@ -79,7 +119,8 @@ namespace CapMachine.Wpf
IFreeSql Fsql = new FreeSqlBuilder()
//.UseConnectionString(DataType.SqlServer, "Data Source=CT-PC;user instance=false;Initial Catalog=KylinEMS;Encrypt=True;TrustServerCertificate=True;User ID=sa;Password=12345678")
//.UseConnectionString(FreeSql.DataType.SqlServer, "Data Source=CT-PC;user instance=false;Initial Catalog=CapMachine;Encrypt=True;TrustServerCertificate=True;User ID=sa;Password=12345678")
.UseConnectionString(FreeSql.DataType.SqlServer, LocalDbStr)
.UseConnectionString(FreeSql.DataType.SqlServer, Constr)
//.UseConnectionString(FreeSql.DataType.SqlServer, LocalDbDir)
//.UseConnectionString(FreeSql.DataType.Sqlite, Con)
.UseAutoSyncStructure(true)
.Build();
@@ -97,19 +138,30 @@ namespace CapMachine.Wpf
containerRegistry.RegisterForNavigation<ProStepConfigPsView, ProStepConfigPsViewModel>();
containerRegistry.RegisterForNavigation<ProStepConfigMainView, ProStepConfigMainViewModel>();
containerRegistry.RegisterForNavigation<QuickMeterStepView, QuickMeterStepViewModel>();
containerRegistry.RegisterForNavigation<HistoryDataView, HistoryDataViewModel>();
containerRegistry.RegisterForNavigation<CANConfigView, CANConfigViewModel>();
//注册Dialog视图时绑定VM
containerRegistry.RegisterDialog<DialogCreateProView, DialogCreateProViewModel>();
containerRegistry.RegisterDialog<DialogEditProView, DialogEditProViewModel>();
containerRegistry.RegisterDialog<DialogChartRtConfigView, DialogChartRtConfigViewModel>();
containerRegistry.RegisterDialog<DialogMeterCycleCountView, DialogMeterCycleCountViewModel>();
containerRegistry.RegisterDialog<DialogChartGroupTabView, DialogChartGroupTabViewModel>();
containerRegistry.RegisterDialog<DialogYAxisConfigView, DialogYAxisConfigViewModel>();
containerRegistry.RegisterDialog<DialogHistoryChartRtConfigView, DialogHistoryChartRtConfigViewModel>();
containerRegistry.RegisterDialog<DialogExpInfoView, DialogExpInfoViewModel>();
containerRegistry.RegisterDialog<DialogUserView, DialogUserViewModel>();
containerRegistry.RegisterDialog<DialogCanRwConfigView, DialogCanRwConfigViewModel>();
containerRegistry.RegisterDialog<DialogCanLinConfigCreateView, DialogCanLinConfigCreateViewModel>();
containerRegistry.RegisterDialog<DialogPIDConfigView, DialogPIDConfigViewModel>();
containerRegistry.RegisterDialog<DialogLimitConfigView, DialogLimitConfigViewModel>();
//注册AutoMapper
//containerRegistry.RegisterSingleton<IAutoMapperProvider, AutoMapperProvider>();
//containerRegistry.Register(typeof(IMapper), GetMapper);
}
//private IMapper GetMapper(IContainerProvider container)
//{
// var provider = container.Resolve<IAutoMapperProvider>();
@@ -133,10 +185,15 @@ namespace CapMachine.Wpf
/// </summary>
protected override void OnInitialized()
{
//Thread.CurrentThread.CurrentCulture = new CultureInfo("zh-CN");
//从容器中获取MainView的实例对象
var container = ContainerLocator.Container;
var shell = container.Resolve<object>("MainView");
//加载种子数据
var SeekData = new SeekData(container.Resolve<IFreeSql>());
if (shell is Window view)
{
//更新Prism注册区域信息
@@ -146,7 +203,7 @@ namespace CapMachine.Wpf
//给MainView的MainViewFooterContentRegion区域设置FooterView具体的信息
regionManager.RequestNavigate("MainViewFooterContentRegion", nameof(FooterView));
regionManager.RequestNavigate("MainViewContentRegion", nameof(MonitorView));
//调用首页的INavigationAware 接口做一个初始化操作
if (view.DataContext is INavigationAware navigationAware)
@@ -155,7 +212,6 @@ namespace CapMachine.Wpf
//呈现首页
App.Current.MainWindow = view;
}
}
//先加载服务防止在ViewModel中使用时速度慢
@@ -164,11 +220,147 @@ namespace CapMachine.Wpf
//var appVersionService2 = ContainerLocator.Container.Resolve<ILogService>();
var appVersionService3 = ContainerLocator.Container.Resolve<MachineRtDataService>();
var appVersionService4 = ContainerLocator.Container.Resolve<ProStepConfigPsView>();
var appVersionService5 = ContainerLocator.Container.Resolve<ProConfigView>();
var appVersionService6 = ContainerLocator.Container.Resolve<HistoryDataView>();
var appVersionService7 = ContainerLocator.Container.Resolve<RealTimeChartView>();
var appVersionService8 = ContainerLocator.Container.Resolve<CanDriveService>();
var appVersionService9 = ContainerLocator.Container.Resolve<DataRecordService>();
//给当前的全局异常捕捉服务使用
LogService = ContainerLocator.Container.Resolve<ILogService>();
LogService.Error("ex.ToString()");
base.OnInitialized();
}
#region
void App_Startup(object sender, StartupEventArgs e)
{
//UI线程未捕获异常处理事件 UI主线程
this.DispatcherUnhandledException += new DispatcherUnhandledExceptionEventHandler(App_DispatcherUnhandledException);
//Task线程内未捕获异常处理事件
TaskScheduler.UnobservedTaskException += TaskScheduler_UnobservedTaskException;
//非UI线程未捕获异常处理事件 (例如自己创建的一个子线程)
AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);
}
void App_Exit(object sender, ExitEventArgs e)
{
//程序退出时需要处理的业务
}
/// <summary>
/// UI线程未捕获异常处理事件UI主线程
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
void App_DispatcherUnhandledException(object sender, System.Windows.Threading.DispatcherUnhandledExceptionEventArgs e)
{
//此时程序出现严重异常,将强制结束退出
try
{
HandleException(e.Exception);
MessageBox.Show("UI线程异常:" + e.Exception.Message);
}
catch (Exception ex)
{
HandleException(ex);
MessageBox.Show("UI线程发生致命错误");
}
finally
{
e.Handled = true;
}
}
/// <summary>
/// 非UI线程未捕获异常处理事件(例如自己创建的一个子线程)
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
{
try
{
var exception = e.ExceptionObject as Exception;
if (exception != null)
{
HandleException(exception);
StringBuilder sbEx = new StringBuilder();
if (e.IsTerminating)
{
sbEx.Append("非UI线程发生致命错误");
}
sbEx.Append("非UI线程异常");
if (e.ExceptionObject is Exception)
{
sbEx.Append(((Exception)e.ExceptionObject).Message);
}
else
{
sbEx.Append(e.ExceptionObject);
}
MessageBox.Show(sbEx.ToString());
}
}
catch (Exception ex)
{
HandleException(ex);
}
finally
{
//ignore
}
}
/// <summary>
/// Task线程内未捕获异常处理事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
void TaskScheduler_UnobservedTaskException(object sender, UnobservedTaskExceptionEventArgs e)
{
try
{
var exception = e.Exception as Exception;
if (exception != null)
{
HandleException(exception);
//task线程内未处理捕获
MessageBox.Show("Task线程异常" + e.Exception.Message);
}
}
catch (Exception ex)
{
HandleException(ex);
}
finally
{
//设置该异常已察觉(这样处理后就不会引起程序崩溃)
e.SetObserved();
}
}
/// <summary>
/// 公共的日志记录方法
/// </summary>
/// <param name="ex"></param>
private void HandleException(Exception ex)
{
//记录日志
LogService.Error(ex.ToString());
}
#endregion
}
}