diff --git a/FATrace.App/frmMain.Designer.cs b/FATrace.App/frmMain.Designer.cs
index 0862f4d..11cb372 100644
--- a/FATrace.App/frmMain.Designer.cs
+++ b/FATrace.App/frmMain.Designer.cs
@@ -825,7 +825,7 @@ namespace FATrace.App
btnRawName1.Name = "btnRawName1";
btnRawName1.Size = new Size(266, 48);
btnRawName1.TabIndex = 1;
- btnRawName1.Text = "YG05030013 瑞士乳杆菌GCL1815";
+ btnRawName1.Text = "1121000265 瑞士乳杆菌GCL1815";
btnRawName1.UseVisualStyleBackColor = true;
btnRawName1.Click += btnRawName1_Click;
//
@@ -1109,6 +1109,7 @@ namespace FATrace.App
StartPosition = FormStartPosition.CenterScreen;
Text = "管理界面";
WindowState = FormWindowState.Maximized;
+ FormClosing += frmMain_FormClosing;
FormClosed += frmMain_FormClosed;
Load += frmMain_Load;
statusStrip1.ResumeLayout(false);
diff --git a/FATrace.App/frmMain.cs b/FATrace.App/frmMain.cs
index a457ec0..619626e 100644
--- a/FATrace.App/frmMain.cs
+++ b/FATrace.App/frmMain.cs
@@ -37,6 +37,11 @@ namespace FATrace.App
// TouchSocket 版称重客户端
private TScalTcp? _scaleTcp;
+ ///
+ /// 关闭确认标记:用于避免重复弹窗(如关闭过程触发多次 FormClosing)
+ ///
+ private bool _closeConfirmed;
+
// 打印机连接参数(用于状态检测)
private string _printerIp = "192.0.1.21";
private int _printerPort = 9100;
@@ -251,7 +256,7 @@ namespace FATrace.App
{
new RawCtrInfo(){
RawName="瑞士乳杆菌GCL1815",
- RawCode="YG05030013",
+ RawCode="1121000265",
BtnControlName="btnRawName1",
RawSource=RawSource.Japan
},
@@ -993,20 +998,6 @@ namespace FATrace.App
ShowError();
}
- // 窗体关闭时,停止称重服务,释放网络连接
- protected override void OnFormClosed(FormClosedEventArgs e)
- {
- try
- {
- _scaleTcp?.StopAsync().GetAwaiter().GetResult();
-
- }
- catch
- {
- }
- base.OnFormClosed(e);
- }
-
///
private void btnLogin_Click(object sender, EventArgs e)
{
@@ -1443,5 +1434,37 @@ namespace FATrace.App
MessageBox.Show($"保存配置失败:{ex.Message}", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
+
+ private void frmMain_FormClosing(object sender, FormClosingEventArgs e)
+ {
+ if (!_closeConfirmed && e.CloseReason == CloseReason.UserClosing)
+ {
+ try
+ {
+ var result = MessageBox.Show(
+ "确认退出系统?",
+ "退出确认",
+ MessageBoxButtons.YesNo,
+ MessageBoxIcon.Question,
+ MessageBoxDefaultButton.Button2);
+
+ if (result != DialogResult.Yes)
+ {
+ e.Cancel = true;
+ logger.Info("已取消关闭");
+ return;
+ }
+
+ _closeConfirmed = true;
+ logger.Info("用户确认关闭,开始退出");
+ }
+ catch (Exception ex)
+ {
+ // 弹窗异常时,为保证可关闭,默认继续退出,但记录日志
+ logger.Error(ex, "关闭确认弹窗异常");
+ _closeConfirmed = true;
+ }
+ }
+ }
}
}
diff --git a/FATrace.OEMApp/MainApp.Designer.cs b/FATrace.OEMApp/MainApp.Designer.cs
index 64a5ca8..c0ce1ce 100644
--- a/FATrace.OEMApp/MainApp.Designer.cs
+++ b/FATrace.OEMApp/MainApp.Designer.cs
@@ -63,7 +63,6 @@ namespace FATrace.OEMApp
tabPage2 = new TabPage();
dataGridView1 = new DataGridView();
materialCard1 = new ReaLTaiizor.Controls.MaterialCard();
- btnStopHistoryPlay = new Button();
label4 = new Label();
txtSearchCode = new TextBox();
btnHistoryVideoSearch = new Button();
@@ -72,7 +71,6 @@ namespace FATrace.OEMApp
label2 = new Label();
label1 = new Label();
PdtHistorySearchStart = new ReaLTaiizor.Controls.PoisonDateTime();
- videoView1 = new LibVLCSharp.WinForms.VideoView();
tabPage3 = new TabPage();
metroProgressBar1 = new ReaLTaiizor.Controls.MetroProgressBar();
DownloadProgressBar = new ProgressBar();
@@ -93,7 +91,6 @@ namespace FATrace.OEMApp
tabPage2.SuspendLayout();
((System.ComponentModel.ISupportInitialize)dataGridView1).BeginInit();
materialCard1.SuspendLayout();
- ((System.ComponentModel.ISupportInitialize)videoView1).BeginInit();
tabPage3.SuspendLayout();
navPanel.SuspendLayout();
SuspendLayout();
@@ -365,6 +362,7 @@ namespace FATrace.OEMApp
btnRawStopLoadVideo.TabIndex = 7;
btnRawStopLoadVideo.Text = "停止下载";
btnRawStopLoadVideo.UseVisualStyleBackColor = true;
+ btnRawStopLoadVideo.Visible = false;
btnRawStopLoadVideo.Click += btnRawStopLoadVideo_Click;
//
// btnTestAction
@@ -375,6 +373,7 @@ namespace FATrace.OEMApp
btnTestAction.TabIndex = 5;
btnTestAction.Text = "结束操作";
btnTestAction.UseVisualStyleBackColor = true;
+ btnTestAction.Visible = false;
btnTestAction.Click += btnTestAction_Click;
//
// label7
@@ -428,7 +427,6 @@ namespace FATrace.OEMApp
//
tabPage2.Controls.Add(dataGridView1);
tabPage2.Controls.Add(materialCard1);
- tabPage2.Controls.Add(videoView1);
tabPage2.Font = new Font("Microsoft YaHei UI", 14.25F, FontStyle.Bold, GraphicsUnit.Point, 134);
tabPage2.ImageKey = "Load.png";
tabPage2.Location = new Point(4, 5);
@@ -445,13 +443,12 @@ namespace FATrace.OEMApp
dataGridView1.Location = new Point(197, 235);
dataGridView1.Name = "dataGridView1";
dataGridView1.ReadOnly = true;
- dataGridView1.Size = new Size(835, 677);
+ dataGridView1.Size = new Size(1699, 677);
dataGridView1.TabIndex = 11;
//
// materialCard1
//
materialCard1.BackColor = Color.FromArgb(255, 255, 255);
- materialCard1.Controls.Add(btnStopHistoryPlay);
materialCard1.Controls.Add(label4);
materialCard1.Controls.Add(txtSearchCode);
materialCard1.Controls.Add(btnHistoryVideoSearch);
@@ -467,20 +464,9 @@ namespace FATrace.OEMApp
materialCard1.MouseState = ReaLTaiizor.Helper.MaterialDrawHelper.MaterialMouseState.HOVER;
materialCard1.Name = "materialCard1";
materialCard1.Padding = new Padding(14);
- materialCard1.Size = new Size(836, 194);
+ materialCard1.Size = new Size(1699, 194);
materialCard1.TabIndex = 10;
//
- // btnStopHistoryPlay
- //
- btnStopHistoryPlay.Location = new Point(642, 132);
- btnStopHistoryPlay.Name = "btnStopHistoryPlay";
- btnStopHistoryPlay.Size = new Size(116, 45);
- btnStopHistoryPlay.TabIndex = 12;
- btnStopHistoryPlay.Text = "停止播放";
- btnStopHistoryPlay.UseVisualStyleBackColor = true;
- btnStopHistoryPlay.Visible = false;
- btnStopHistoryPlay.Click += btnStopHistoryPlay_Click;
- //
// label4
//
label4.AutoSize = true;
@@ -558,16 +544,6 @@ namespace FATrace.OEMApp
PdtHistorySearchStart.Size = new Size(131, 32);
PdtHistorySearchStart.TabIndex = 0;
//
- // videoView1
- //
- videoView1.BackColor = Color.Black;
- videoView1.Location = new Point(1043, 24);
- videoView1.MediaPlayer = null;
- videoView1.Name = "videoView1";
- videoView1.Size = new Size(857, 888);
- videoView1.TabIndex = 7;
- videoView1.Text = "videoView1";
- //
// tabPage3
//
tabPage3.Controls.Add(metroProgressBar1);
@@ -723,6 +699,7 @@ namespace FATrace.OEMApp
StartPosition = FormStartPosition.CenterScreen;
Text = "添加剂追溯系统";
WindowState = FormWindowState.Maximized;
+ FormClosing += MainApp_FormClosing;
Load += MainApp_Load;
statusStrip1.ResumeLayout(false);
statusStrip1.PerformLayout();
@@ -739,7 +716,6 @@ namespace FATrace.OEMApp
((System.ComponentModel.ISupportInitialize)dataGridView1).EndInit();
materialCard1.ResumeLayout(false);
materialCard1.PerformLayout();
- ((System.ComponentModel.ISupportInitialize)videoView1).EndInit();
tabPage3.ResumeLayout(false);
navPanel.ResumeLayout(false);
ResumeLayout(false);
@@ -761,7 +737,6 @@ namespace FATrace.OEMApp
private Button btnStopLoadVideo;
private ProgressBar DownloadProgressBar;
private ReaLTaiizor.Controls.MetroProgressBar metroProgressBar1;
- private LibVLCSharp.WinForms.VideoView videoView1;
private ReaLTaiizor.Controls.MaterialCard materialCard1;
private ReaLTaiizor.Controls.PoisonDateTime PdtHistorySearchStart;
private Label label1;
@@ -772,7 +747,6 @@ namespace FATrace.OEMApp
private Label label4;
private TextBox txtSearchCode;
private DataGridView dataGridView1;
- private Button btnStopHistoryPlay;
private ReaLTaiizor.Controls.MaterialCard materialCard2;
private Label label5;
private Label label6;
diff --git a/FATrace.OEMApp/MainApp.cs b/FATrace.OEMApp/MainApp.cs
index 596b5ce..a997b4c 100644
--- a/FATrace.OEMApp/MainApp.cs
+++ b/FATrace.OEMApp/MainApp.cs
@@ -4,12 +4,14 @@ using FATrace.HKNetLib.Wrapper;
using FATrace.Model;
using FATrace.OEMApp.Services;
using FATrace.OEMApp.Model;
+using System.Diagnostics;
using System.Threading.Tasks;
using LibVLCSharp.Shared;
using NLog;
using ReaLTaiizor.Forms;
using System.Collections.Concurrent;
using System.ComponentModel;
+using System.Threading;
using TaskStatus = FATrace.Model.TaskStatus;
namespace FATrace.OEMApp
@@ -41,6 +43,11 @@ namespace FATrace.OEMApp
private int _lvLogMaxItems = 1000;
private int _lastProgressLogged = -1;
+ ///
+ /// 关闭确认标记:用于避免重复弹窗(如关闭过程触发多次 OnFormClosing)
+ ///
+ private bool _closeConfirmed;
+
private void InitLvLog()
{
try
@@ -82,7 +89,10 @@ namespace FATrace.OEMApp
for (int i = 0; i < 200; i++) { if (LvLog.Items.Count == 0) break; LvLog.Items.RemoveAt(0); }
}
}
- catch { }
+ catch (Exception ex)
+ {
+ LogError($"AppendLog: {ex.Message}");
+ }
}
private void LogInfo(string msg) => AppendLog("INFO", msg, Color.FromArgb(33, 33, 33));
@@ -134,7 +144,7 @@ namespace FATrace.OEMApp
/// PLC数据服务
///
private PLCDataService PLCDataService { get; set; }
- private TimeClearDataService TimeClearService { get; set; }
+ //private TimeClearDataService TimeClearService { get; set; }
private System.Windows.Forms.Timer _statusTimer;
///
@@ -162,7 +172,10 @@ namespace FATrace.OEMApp
{
HkCameraClient.NVRLoadVideoProcessEventHandler += HkCameraClient_NVRLoadVideoProcessEventHandler;
}
- catch { }
+ catch (Exception ex)
+ {
+ LogError($"AppendLog: {ex.Message}");
+ }
//读取配置
//HkCameraClient.NVR_IP = ConfigHelper.GetValue("NVRIP");
@@ -198,7 +211,6 @@ namespace FATrace.OEMApp
//NVR登录
NVRLogin();
- InitMediaPlayer();
InitHistoryGridBinding();
// 启动后台任务服务:下载队列(单线程顺序)与 Jellyfin 批量监控(并行匹配)
@@ -212,11 +224,13 @@ namespace FATrace.OEMApp
try { DownloadTaskWorker.Instance.TaskFailed += OnTaskFailed; } catch { }
// JellyfinMonitorQueueService.Instance.Start();
// LogInfo("Jellyfin 监控服务已启动");
- LogInfo("Jellyfin 监控服务已停用");
- TimeClearService = new TimeClearDataService();
- TimeClearService.Info += (m) => LogInfo($"[清理]{m}");
- TimeClearService.Start();
- LogInfo("定时清理服务已启动");
+ //LogInfo("Jellyfin 监控服务已停用");
+
+ //TimeClearService = new TimeClearDataService();
+ //TimeClearService.Info += (m) => LogInfo($"[清理]{m}");
+ //TimeClearService.Start();
+
+ //LogInfo("定时清理服务已启动");
}
catch (Exception ex)
{
@@ -230,7 +244,7 @@ namespace FATrace.OEMApp
RefreshRuLogGrid();
// 初始化底部连接状态(立即检测一次 + 定时轻量检测)
- SafeSetStatus(tslPlcConnection, PLCDataService?.PlcConnected == true, "Plc连接状态");
+ //SafeSetStatus(tslPlcConnection, PLCDataService?.PlcConnected == true, "Plc连接状态");
_ = UpdateDbStatusAsync();
_ = UpdateNasStatusAsync();
_ = UpdateNvrStatusAsync();
@@ -464,42 +478,41 @@ namespace FATrace.OEMApp
#region 视频播放
- private LibVLC _libVLC;
- private MediaPlayer _mediaPlayer;
-
- ///
- /// 初始化MediaPlay
- ///
- private void InitMediaPlayer()
+ private static async Task FileExistsWithTimeoutAsync(string path, int timeoutMs, CancellationToken cancellationToken)
{
- _libVLC = new LibVLC();
- _mediaPlayer = new MediaPlayer(_libVLC);
- videoView1.MediaPlayer = _mediaPlayer;
-
+ var task = Task.Run(() => File.Exists(path), cancellationToken);
+ var done = await Task.WhenAny(task, Task.Delay(timeoutMs, cancellationToken));
+ if (done != task) return false;
+ return await task;
}
+ private void OpenVideoWithDefaultPlayer(string path)
+ {
+ if (string.IsNullOrWhiteSpace(path))
+ {
+ throw new ArgumentException("视频路径为空", nameof(path));
+ }
+
+ try
+ {
+ var psi = new ProcessStartInfo
+ {
+ FileName = path,
+ UseShellExecute = true
+ };
+ Process.Start(psi);
+ LogInfo($"已使用系统播放器打开: {path}");
+ }
+ catch (Exception ex)
+ {
+ LogError($"系统播放器打开失败: {ex.Message} | {path}");
+ throw;
+ }
+ }
+
+
#endregion
- ///
- /// 停止播放当前的视频文件
- ///
- ///
- ///
- private void btnStopHistoryPlay_Click(object sender, EventArgs e)
- {
- _mediaPlayer.Stop();
- }
-
- ///
- /// 清理播放资源
- ///
- private void CleanMediaPlay()
- {
- _mediaPlayer.Stop();
- _mediaPlayer.Dispose();
- _libVLC.Dispose();
- }
-
#region 历史数据查询
@@ -582,7 +595,7 @@ namespace FATrace.OEMApp
///
/// 双击行,播放该行对应的视频文件
///
- private void DataGridView1_CellDoubleClick(object? sender, DataGridViewCellEventArgs e)
+ private async void DataGridView1_CellDoubleClick(object? sender, DataGridViewCellEventArgs e)
{
if (e.RowIndex < 0) return; // 双击列头等
try
@@ -596,14 +609,16 @@ namespace FATrace.OEMApp
MessageBox.Show("该记录没有可播放的视频路径。", "播放提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
return;
}
- if (!File.Exists(path))
+
+ using var cts = new CancellationTokenSource(TimeSpan.FromSeconds(5));
+ var exists = await FileExistsWithTimeoutAsync(path, timeoutMs: 4000, cts.Token);
+ if (!exists)
{
- MessageBox.Show($"未找到视频文件:\n{path}", "播放失败", MessageBoxButtons.OK, MessageBoxIcon.Warning);
+ MessageBox.Show($"未找到视频文件或访问超时(网络盘可能较慢):\n{path}", "播放失败", MessageBoxButtons.OK, MessageBoxIcon.Warning);
return;
}
- _mediaPlayer?.Stop();
- _mediaPlayer?.Play(new LibVLCSharp.Shared.Media(_libVLC, path));
+ OpenVideoWithDefaultPlayer(path);
}
}
catch (Exception ex)
@@ -673,6 +688,13 @@ namespace FATrace.OEMApp
continue;
}
+ // 隐藏视频路径列(仍保留数据用于双击播放)
+ if (propName == nameof(OEMRawUse.VideoFilePath))
+ {
+ col.Visible = false;
+ continue;
+ }
+
// 仅显示指定字段,其他隐藏
if (!allowedProps.Contains(propName))
{
@@ -714,13 +736,29 @@ namespace FATrace.OEMApp
///
private void btnTestAction_Click(object sender, EventArgs e)
{
- if (CurParsedCodeInfo == null) return;
+ if (CurParsedCodeInfo == null)
+ {
+ CurParsedCodeInfo = new ParsedCodeInfo()
+ {
+ Batch = "260131",
+ Code = "DYG05030013,250710,8228,12,01,7",
+ Count = 1,
+ RawCode = "DYG05030013",
+ RawName = "",
+ RegionCode = "2",
+ RegionName = "1",
+ ShelfLifeMonths = 12,
+ Weight = (decimal)80.25,
+ };
+ //return;
+ }
+
var taskId = DownloadTaskWorker.Instance.Enqueue(
CurParsedCodeInfo,
user: CurUserName,
- start: DateTime.Now.AddDays(-2),
- end: DateTime.Now.AddDays(-2).AddSeconds(DownloadTaskWorker.VideoTime)
+ start: DateTime.Now,
+ end: DateTime.Now.AddSeconds(DownloadTaskWorker.VideoTime)
);
//MessageBox.Show($"[Test] 已入队下载任务,Id={taskId}");
}
@@ -965,6 +1003,7 @@ namespace FATrace.OEMApp
}
catch (Exception ex)
{
+ LogError($"[gridRULog] 刷新失败: {ex.Message}");
System.Diagnostics.Debug.WriteLine($"[gridRULog] 刷新失败: {ex.Message}");
}
}
@@ -992,7 +1031,10 @@ namespace FATrace.OEMApp
_ = SaveCsvForTaskAsync(t);
}
}
- catch { }
+ catch (Exception ex)
+ {
+ LogError($"[OnTaskStatusChanged] 失败: {ex.Message}");
+ }
}
private void OnTaskFailed(DownloadTask t, string? error)
@@ -1011,7 +1053,10 @@ namespace FATrace.OEMApp
// 失败同样清零进度
ResetProgressBar();
}
- catch { }
+ catch (Exception ex)
+ {
+ LogError($"[OnTaskFailed] 失败: {ex.Message}");
+ }
}
private void UpsertRuLogRowFromTask(DownloadTask t)
@@ -1098,7 +1143,10 @@ namespace FATrace.OEMApp
txtCsvSaveState.ForeColor = ok ? Color.ForestGreen : Color.DarkRed;
}
}
- catch { }
+ catch (Exception ex)
+ {
+ LogError($"[SafeSetCsvState] 失败: {ex.Message}");
+ }
}
private static void SetDataGridViewDoubleBuffered(DataGridView dgv)
@@ -1123,29 +1171,6 @@ namespace FATrace.OEMApp
HkCameraClient.Sdk_NET_DVR_StopGetFile();
}
- protected async override void OnFormClosing(FormClosingEventArgs e)
- {
- try { DownloadTaskWorker.Instance.DownloadFileNameChanged -= OnDownloadFileNameChanged; } catch { }
- try { DownloadTaskWorker.Instance.TaskStarted -= OnTaskStatusChanged; } catch { }
- try { DownloadTaskWorker.Instance.TaskCompleted -= OnTaskStatusChanged; } catch { }
- try { DownloadTaskWorker.Instance.TaskFailed -= OnTaskFailed; } catch { }
- try { _statusTimer?.Stop(); _statusTimer?.Dispose(); _statusTimer = null; } catch { }
- try { TimeClearService?.Stop(); } catch { }
- try
- {
- if (TouchSocketServer != null && TouchSocketServer.IsRunning)
- {
- await TouchSocketServer.StopAsync();
- LogInfo("TouchSocket Server 已停止");
- }
- }
- catch (Exception ex)
- {
- LogError($"TouchSocket Server 停止失败: {ex.Message}");
- }
- base.OnFormClosing(e);
- }
-
///
/// 当前下载文件的名称改变
///
@@ -1165,7 +1190,10 @@ namespace FATrace.OEMApp
}
}
- catch { }
+ catch (Exception ex)
+ {
+ LogError($"OnDownloadFileNameChanged: {ex.Message}");
+ }
}
private void TouchSocketServer_ClientConnected(object? sender, TouchSocketServer.ClientConnectedEventArgs e)
@@ -1208,8 +1236,9 @@ namespace FATrace.OEMApp
end: DateTime.Now
);
}
- catch
+ catch (Exception ex)
{
+ LogError($"TouchSocketServer_DataReceived: {ex.Message}");
return;
}
}
@@ -1245,7 +1274,10 @@ namespace FATrace.OEMApp
};
_statusTimer.Start();
}
- catch { }
+ catch (Exception ex)
+ {
+ LogError($"StartStatusTimer: {ex.Message}");
+ }
}
private void SafeSetStatus(ToolStripStatusLabel lbl, bool ok, string title)
@@ -1263,7 +1295,10 @@ namespace FATrace.OEMApp
lbl.Text = text; lbl.ForeColor = fore;
}
}
- catch { }
+ catch (Exception ex)
+ {
+ LogError($"SafeSetStatus: {ex.Message}");
+ }
}
private async Task UpdateDbStatusAsync()
@@ -1306,5 +1341,57 @@ namespace FATrace.OEMApp
SafeSetStatus(tslNVRConnection, ok, "NVR连接状态");
}
#endregion
+
+ private void MainApp_FormClosing(object sender, FormClosingEventArgs e)
+ {
+ if (!_closeConfirmed && e.CloseReason == CloseReason.UserClosing)
+ {
+ try
+ {
+ var result = MessageBox.Show(
+ "确认退出系统?",
+ "退出确认",
+ MessageBoxButtons.YesNo,
+ MessageBoxIcon.Question,
+ MessageBoxDefaultButton.Button2);
+
+ if (result != DialogResult.Yes)
+ {
+ e.Cancel = true;
+ LogInfo("已取消关闭");
+ return;
+ }
+
+ _closeConfirmed = true;
+ LogInfo("用户确认关闭,开始退出");
+ }
+ catch (Exception ex)
+ {
+ // 弹窗异常时,为保证可关闭,默认继续退出,但记录日志
+ LogError($"关闭确认弹窗异常: {ex.Message}");
+ _closeConfirmed = true;
+ }
+ }
+
+ try { DownloadTaskWorker.Instance.DownloadFileNameChanged -= OnDownloadFileNameChanged; } catch { }
+ try { DownloadTaskWorker.Instance.TaskStarted -= OnTaskStatusChanged; } catch { }
+ try { DownloadTaskWorker.Instance.TaskCompleted -= OnTaskStatusChanged; } catch { }
+ try { DownloadTaskWorker.Instance.TaskFailed -= OnTaskFailed; } catch { }
+ try { _statusTimer?.Stop(); _statusTimer?.Dispose(); _statusTimer = null; } catch { }
+ //try { TimeClearService?.Stop(); } catch { }
+ try
+ {
+ if (TouchSocketServer != null && TouchSocketServer.IsRunning)
+ {
+ //await TouchSocketServer.cl();
+ LogInfo("TouchSocket Server 已停止");
+ }
+ }
+ catch (Exception ex)
+ {
+ LogError($"TouchSocket Server 停止失败: {ex.Message}");
+ }
+
+ }
}
}
diff --git a/FATrace.OEMApp/MainApp.resx b/FATrace.OEMApp/MainApp.resx
index 3610f61..3905ee9 100644
--- a/FATrace.OEMApp/MainApp.resx
+++ b/FATrace.OEMApp/MainApp.resx
@@ -128,7 +128,7 @@
AAEAAAD/////AQAAAAAAAAAMAgAAAEZTeXN0ZW0uV2luZG93cy5Gb3JtcywgQ3VsdHVyZT1uZXV0cmFs
LCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5BQEAAAAmU3lzdGVtLldpbmRvd3MuRm9ybXMu
SW1hZ2VMaXN0U3RyZWFtZXIBAAAABERhdGEHAgIAAAAJAwAAAA8DAAAAaCEAAAJNU0Z0AUkBTAIBAQgB
- AAHoAQEB6AEBARABAAEQAQAE/wEhAQAI/wFCAU0BNgcAATYDAAEoAwABQAMAATADAAEBAQABIAYAATD/
+ AAEwAQIBMAECARABAAEQAQAE/wEhAQAI/wFCAU0BNgcAATYDAAEoAwABQAMAATADAAEBAQABIAYAATD/
AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AFIAAdsBlgESAf8B2wGWARIB/wQAAxIBGANJAYgB
2wGWARIB/wHbAZYBEgH/AdsBlgESAf8B2wGWARIB/wHbAZYBEgH/AdsBlgESAf8B2wGWARIB/wQAAdsB
lgESAf8B2wGWARIB/wHbAZYBEgH/AdsBlgESAf8B2wGWARIB/wHbAZYBEgH/AdsBlgESAf8UAAHbAZYB
@@ -280,8 +280,8 @@
AAEAAAD/////AQAAAAAAAAAMAgAAAEZTeXN0ZW0uV2luZG93cy5Gb3JtcywgQ3VsdHVyZT1uZXV0cmFs
LCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5BQEAAAAmU3lzdGVtLldpbmRvd3MuRm9ybXMu
- SW1hZ2VMaXN0U3RyZWFtZXIBAAAABERhdGEHAgIAAAAJAwAAAA8DAAAA9gUAAAJNU0Z0AUkBTAMBAQAB
- QAEAAUABAAEQAQABEAEABP8BIQEACP8BQgFNATYHAAE2AwABKAMAAUADAAEQAwABAQEAASAGAAEQKgAB
+ SW1hZ2VMaXN0U3RyZWFtZXIBAAAABERhdGEHAgIAAAAJAwAAAA8DAAAA9AUAAAJNU0Z0AUkBTAMBAQAB
+ iAEAAYgBAAEQAQABEAEABP8BIQEACP8BQgFNATYHAAE2AwABKAMAAUADAAEQAwABAQEAASAGAAEQKgAB
2wGWARIB/wHbAZYBEgH/AdsBlgESAf8B2wGWARIB/wHbAZYBEgH/5AAB2wGWARIB/wHbAZYBEgH/AdsB
lgESAf8B2wGWARIB/wHbAZYBEgH/AdsBlgESAf8B2wGWARIB/wHbAZYBEgH/AdsBlgESAf/YAAHbAZYB
EgH/AdsBlgESAf8B2wGWARIB/wHbAZYBEgH/AdsBlgESAf8B2wGWARIB/wHbAZYBEgH/AdsBlgESAf8B
@@ -298,15 +298,15 @@
/wHbAZYBEgH/AdsBlgESAf/EAAHbAZYBEgH/AdsBlgESAf8B2wGWARIB/wHbAZYBEgH/AdsBlgESAf8B
2wGWARIB/wHbAZYBEgH/AdsBlgESAf8B2wGWARIB/wHbAZYBEgH/AdsBlgESAf8B2wGWARIB/wHbAZYB
EgH/AdsBlgESAf8B2wGWARIB/8QAAxIBGAHbAZYBEgH/AdsBlgESAf8B2wGWARIB/wHbAZYBEgH/AdsB
- lgESAf8B2wGWARIB/wQAAVsCWgG/AdsBlgESAf8B2wGWARIB/wHbAZYBEgH/AdsBlgESAf8B2wGWARIB
- /8wAAdsBlgESAf8B2wGWARIB/wHbAZYBEgH/AdsBlgESAf8B2wGWARIB/wHbAZYBEgH/CAAB2wGWARIB
- /wHbAZYBEgH/AdsBlgESAf8B2wGWARIB/wHbAZYBEgH/0AAB2wGWARIB/wHbAZYBEgH/AdsBlgESAf8B
- 2wGWARIB/wHbAZYBEgH/AdsBlgESAf8DRAF4AdsBlgESAf8B2wGWARIB/wHbAZYBEgH/AdsBlgESAf/Y
- AAHbAZYBEgH/AdsBlgESAf8B2wGWARIB/wHbAZYBEgH/AdsBlgESAf8B2wGWARIB/wHbAZYBEgH/AdsB
- lgESAf8B2wGWARIB/+AAAxIBGAHbAZYBEgH/AdsBlgESAf8B2wGWARIB/wHbAZYBEgH/AdsBlgESAf//
- ANUAAUIBTQE+BwABPgMAASgDAAFAAwABEAMAAQEBAAEBBQABgBcAA/8BAAH8AR8GAAHwAQcGAAHgAQMG
- AAHBAYEGAALBBgABgQGABgABgQGABgABgwGABgABgAHABgABgAcAAYABgQYAAcABwQYAAeABAwYAAfAB
- BwYAAfgBHwYAAv8GAAs=
+ lgESAf8B2wGWARIB/wQAA1oBvwHbAZYBEgH/AdsBlgESAf8B2wGWARIB/wHbAZYBEgH/AdsBlgESAf/M
+ AAHbAZYBEgH/AdsBlgESAf8B2wGWARIB/wHbAZYBEgH/AdsBlgESAf8B2wGWARIB/wgAAdsBlgESAf8B
+ 2wGWARIB/wHbAZYBEgH/AdsBlgESAf8B2wGWARIB/9AAAdsBlgESAf8B2wGWARIB/wHbAZYBEgH/AdsB
+ lgESAf8B2wGWARIB/wHbAZYBEgH/A0QBeAHbAZYBEgH/AdsBlgESAf8B2wGWARIB/wHbAZYBEgH/2AAB
+ 2wGWARIB/wHbAZYBEgH/AdsBlgESAf8B2wGWARIB/wHbAZYBEgH/AdsBlgESAf8B2wGWARIB/wHbAZYB
+ EgH/AdsBlgESAf/gAAMSARgB2wGWARIB/wHbAZYBEgH/AdsBlgESAf8B2wGWARIB/wHbAZYBEgH//wDV
+ AAFCAU0BPgcAAT4DAAEoAwABQAMAARADAAEBAQABAQUAAYAXAAP/AQAB/AEfBgAB8AEHBgAB4AEDBgAB
+ wQGBBgACwQYAAYEBgAYAAYEBgAYAAYMBgAYAAYABwAYAAYAHAAGAAYEGAAHAAcEGAAHgAQMGAAHwAQcG
+ AAH4AR8GAAL/BgAL
diff --git a/FATrace.WPLApp/App.xaml.cs b/FATrace.WPLApp/App.xaml.cs
index 6de2503..ac8aea4 100644
--- a/FATrace.WPLApp/App.xaml.cs
+++ b/FATrace.WPLApp/App.xaml.cs
@@ -74,6 +74,10 @@ namespace FATrace.WPLApp
// 应用主题样式
Syncfusion.SfSkinManager.SfSkinManager.ApplyStylesOnApplication = true;
+ //从容器中获取MainView的实例对象
+ var container = ContainerLocator.Container;
+ var shell = container.Resolve