V1版本
This commit is contained in:
@@ -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
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user