推送
This commit is contained in:
3
FATrace.App/frmMain.Designer.cs
generated
3
FATrace.App/frmMain.Designer.cs
generated
@@ -825,7 +825,7 @@ namespace FATrace.App
|
|||||||
btnRawName1.Name = "btnRawName1";
|
btnRawName1.Name = "btnRawName1";
|
||||||
btnRawName1.Size = new Size(266, 48);
|
btnRawName1.Size = new Size(266, 48);
|
||||||
btnRawName1.TabIndex = 1;
|
btnRawName1.TabIndex = 1;
|
||||||
btnRawName1.Text = "YG05030013 瑞士乳杆菌GCL1815";
|
btnRawName1.Text = "1121000265 瑞士乳杆菌GCL1815";
|
||||||
btnRawName1.UseVisualStyleBackColor = true;
|
btnRawName1.UseVisualStyleBackColor = true;
|
||||||
btnRawName1.Click += btnRawName1_Click;
|
btnRawName1.Click += btnRawName1_Click;
|
||||||
//
|
//
|
||||||
@@ -1109,6 +1109,7 @@ namespace FATrace.App
|
|||||||
StartPosition = FormStartPosition.CenterScreen;
|
StartPosition = FormStartPosition.CenterScreen;
|
||||||
Text = "管理界面";
|
Text = "管理界面";
|
||||||
WindowState = FormWindowState.Maximized;
|
WindowState = FormWindowState.Maximized;
|
||||||
|
FormClosing += frmMain_FormClosing;
|
||||||
FormClosed += frmMain_FormClosed;
|
FormClosed += frmMain_FormClosed;
|
||||||
Load += frmMain_Load;
|
Load += frmMain_Load;
|
||||||
statusStrip1.ResumeLayout(false);
|
statusStrip1.ResumeLayout(false);
|
||||||
|
|||||||
@@ -37,6 +37,11 @@ namespace FATrace.App
|
|||||||
// TouchSocket 版称重客户端
|
// TouchSocket 版称重客户端
|
||||||
private TScalTcp? _scaleTcp;
|
private TScalTcp? _scaleTcp;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 关闭确认标记:用于避免重复弹窗(如关闭过程触发多次 FormClosing)
|
||||||
|
/// </summary>
|
||||||
|
private bool _closeConfirmed;
|
||||||
|
|
||||||
// 打印机连接参数(用于状态检测)
|
// 打印机连接参数(用于状态检测)
|
||||||
private string _printerIp = "192.0.1.21";
|
private string _printerIp = "192.0.1.21";
|
||||||
private int _printerPort = 9100;
|
private int _printerPort = 9100;
|
||||||
@@ -251,7 +256,7 @@ namespace FATrace.App
|
|||||||
{
|
{
|
||||||
new RawCtrInfo(){
|
new RawCtrInfo(){
|
||||||
RawName="瑞士乳杆菌GCL1815",
|
RawName="瑞士乳杆菌GCL1815",
|
||||||
RawCode="YG05030013",
|
RawCode="1121000265",
|
||||||
BtnControlName="btnRawName1",
|
BtnControlName="btnRawName1",
|
||||||
RawSource=RawSource.Japan
|
RawSource=RawSource.Japan
|
||||||
},
|
},
|
||||||
@@ -993,20 +998,6 @@ namespace FATrace.App
|
|||||||
ShowError();
|
ShowError();
|
||||||
}
|
}
|
||||||
|
|
||||||
// 窗体关闭时,停止称重服务,释放网络连接
|
|
||||||
protected override void OnFormClosed(FormClosedEventArgs e)
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
_scaleTcp?.StopAsync().GetAwaiter().GetResult();
|
|
||||||
|
|
||||||
}
|
|
||||||
catch
|
|
||||||
{
|
|
||||||
}
|
|
||||||
base.OnFormClosed(e);
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <param name="e"></param>
|
/// <param name="e"></param>
|
||||||
private void btnLogin_Click(object sender, EventArgs e)
|
private void btnLogin_Click(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
@@ -1443,5 +1434,37 @@ namespace FATrace.App
|
|||||||
MessageBox.Show($"保存配置失败:{ex.Message}", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
36
FATrace.OEMApp/MainApp.Designer.cs
generated
36
FATrace.OEMApp/MainApp.Designer.cs
generated
@@ -63,7 +63,6 @@ namespace FATrace.OEMApp
|
|||||||
tabPage2 = new TabPage();
|
tabPage2 = new TabPage();
|
||||||
dataGridView1 = new DataGridView();
|
dataGridView1 = new DataGridView();
|
||||||
materialCard1 = new ReaLTaiizor.Controls.MaterialCard();
|
materialCard1 = new ReaLTaiizor.Controls.MaterialCard();
|
||||||
btnStopHistoryPlay = new Button();
|
|
||||||
label4 = new Label();
|
label4 = new Label();
|
||||||
txtSearchCode = new TextBox();
|
txtSearchCode = new TextBox();
|
||||||
btnHistoryVideoSearch = new Button();
|
btnHistoryVideoSearch = new Button();
|
||||||
@@ -72,7 +71,6 @@ namespace FATrace.OEMApp
|
|||||||
label2 = new Label();
|
label2 = new Label();
|
||||||
label1 = new Label();
|
label1 = new Label();
|
||||||
PdtHistorySearchStart = new ReaLTaiizor.Controls.PoisonDateTime();
|
PdtHistorySearchStart = new ReaLTaiizor.Controls.PoisonDateTime();
|
||||||
videoView1 = new LibVLCSharp.WinForms.VideoView();
|
|
||||||
tabPage3 = new TabPage();
|
tabPage3 = new TabPage();
|
||||||
metroProgressBar1 = new ReaLTaiizor.Controls.MetroProgressBar();
|
metroProgressBar1 = new ReaLTaiizor.Controls.MetroProgressBar();
|
||||||
DownloadProgressBar = new ProgressBar();
|
DownloadProgressBar = new ProgressBar();
|
||||||
@@ -93,7 +91,6 @@ namespace FATrace.OEMApp
|
|||||||
tabPage2.SuspendLayout();
|
tabPage2.SuspendLayout();
|
||||||
((System.ComponentModel.ISupportInitialize)dataGridView1).BeginInit();
|
((System.ComponentModel.ISupportInitialize)dataGridView1).BeginInit();
|
||||||
materialCard1.SuspendLayout();
|
materialCard1.SuspendLayout();
|
||||||
((System.ComponentModel.ISupportInitialize)videoView1).BeginInit();
|
|
||||||
tabPage3.SuspendLayout();
|
tabPage3.SuspendLayout();
|
||||||
navPanel.SuspendLayout();
|
navPanel.SuspendLayout();
|
||||||
SuspendLayout();
|
SuspendLayout();
|
||||||
@@ -365,6 +362,7 @@ namespace FATrace.OEMApp
|
|||||||
btnRawStopLoadVideo.TabIndex = 7;
|
btnRawStopLoadVideo.TabIndex = 7;
|
||||||
btnRawStopLoadVideo.Text = "停止下载";
|
btnRawStopLoadVideo.Text = "停止下载";
|
||||||
btnRawStopLoadVideo.UseVisualStyleBackColor = true;
|
btnRawStopLoadVideo.UseVisualStyleBackColor = true;
|
||||||
|
btnRawStopLoadVideo.Visible = false;
|
||||||
btnRawStopLoadVideo.Click += btnRawStopLoadVideo_Click;
|
btnRawStopLoadVideo.Click += btnRawStopLoadVideo_Click;
|
||||||
//
|
//
|
||||||
// btnTestAction
|
// btnTestAction
|
||||||
@@ -375,6 +373,7 @@ namespace FATrace.OEMApp
|
|||||||
btnTestAction.TabIndex = 5;
|
btnTestAction.TabIndex = 5;
|
||||||
btnTestAction.Text = "结束操作";
|
btnTestAction.Text = "结束操作";
|
||||||
btnTestAction.UseVisualStyleBackColor = true;
|
btnTestAction.UseVisualStyleBackColor = true;
|
||||||
|
btnTestAction.Visible = false;
|
||||||
btnTestAction.Click += btnTestAction_Click;
|
btnTestAction.Click += btnTestAction_Click;
|
||||||
//
|
//
|
||||||
// label7
|
// label7
|
||||||
@@ -428,7 +427,6 @@ namespace FATrace.OEMApp
|
|||||||
//
|
//
|
||||||
tabPage2.Controls.Add(dataGridView1);
|
tabPage2.Controls.Add(dataGridView1);
|
||||||
tabPage2.Controls.Add(materialCard1);
|
tabPage2.Controls.Add(materialCard1);
|
||||||
tabPage2.Controls.Add(videoView1);
|
|
||||||
tabPage2.Font = new Font("Microsoft YaHei UI", 14.25F, FontStyle.Bold, GraphicsUnit.Point, 134);
|
tabPage2.Font = new Font("Microsoft YaHei UI", 14.25F, FontStyle.Bold, GraphicsUnit.Point, 134);
|
||||||
tabPage2.ImageKey = "Load.png";
|
tabPage2.ImageKey = "Load.png";
|
||||||
tabPage2.Location = new Point(4, 5);
|
tabPage2.Location = new Point(4, 5);
|
||||||
@@ -445,13 +443,12 @@ namespace FATrace.OEMApp
|
|||||||
dataGridView1.Location = new Point(197, 235);
|
dataGridView1.Location = new Point(197, 235);
|
||||||
dataGridView1.Name = "dataGridView1";
|
dataGridView1.Name = "dataGridView1";
|
||||||
dataGridView1.ReadOnly = true;
|
dataGridView1.ReadOnly = true;
|
||||||
dataGridView1.Size = new Size(835, 677);
|
dataGridView1.Size = new Size(1699, 677);
|
||||||
dataGridView1.TabIndex = 11;
|
dataGridView1.TabIndex = 11;
|
||||||
//
|
//
|
||||||
// materialCard1
|
// materialCard1
|
||||||
//
|
//
|
||||||
materialCard1.BackColor = Color.FromArgb(255, 255, 255);
|
materialCard1.BackColor = Color.FromArgb(255, 255, 255);
|
||||||
materialCard1.Controls.Add(btnStopHistoryPlay);
|
|
||||||
materialCard1.Controls.Add(label4);
|
materialCard1.Controls.Add(label4);
|
||||||
materialCard1.Controls.Add(txtSearchCode);
|
materialCard1.Controls.Add(txtSearchCode);
|
||||||
materialCard1.Controls.Add(btnHistoryVideoSearch);
|
materialCard1.Controls.Add(btnHistoryVideoSearch);
|
||||||
@@ -467,20 +464,9 @@ namespace FATrace.OEMApp
|
|||||||
materialCard1.MouseState = ReaLTaiizor.Helper.MaterialDrawHelper.MaterialMouseState.HOVER;
|
materialCard1.MouseState = ReaLTaiizor.Helper.MaterialDrawHelper.MaterialMouseState.HOVER;
|
||||||
materialCard1.Name = "materialCard1";
|
materialCard1.Name = "materialCard1";
|
||||||
materialCard1.Padding = new Padding(14);
|
materialCard1.Padding = new Padding(14);
|
||||||
materialCard1.Size = new Size(836, 194);
|
materialCard1.Size = new Size(1699, 194);
|
||||||
materialCard1.TabIndex = 10;
|
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
|
||||||
//
|
//
|
||||||
label4.AutoSize = true;
|
label4.AutoSize = true;
|
||||||
@@ -558,16 +544,6 @@ namespace FATrace.OEMApp
|
|||||||
PdtHistorySearchStart.Size = new Size(131, 32);
|
PdtHistorySearchStart.Size = new Size(131, 32);
|
||||||
PdtHistorySearchStart.TabIndex = 0;
|
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
|
||||||
//
|
//
|
||||||
tabPage3.Controls.Add(metroProgressBar1);
|
tabPage3.Controls.Add(metroProgressBar1);
|
||||||
@@ -723,6 +699,7 @@ namespace FATrace.OEMApp
|
|||||||
StartPosition = FormStartPosition.CenterScreen;
|
StartPosition = FormStartPosition.CenterScreen;
|
||||||
Text = "添加剂追溯系统";
|
Text = "添加剂追溯系统";
|
||||||
WindowState = FormWindowState.Maximized;
|
WindowState = FormWindowState.Maximized;
|
||||||
|
FormClosing += MainApp_FormClosing;
|
||||||
Load += MainApp_Load;
|
Load += MainApp_Load;
|
||||||
statusStrip1.ResumeLayout(false);
|
statusStrip1.ResumeLayout(false);
|
||||||
statusStrip1.PerformLayout();
|
statusStrip1.PerformLayout();
|
||||||
@@ -739,7 +716,6 @@ namespace FATrace.OEMApp
|
|||||||
((System.ComponentModel.ISupportInitialize)dataGridView1).EndInit();
|
((System.ComponentModel.ISupportInitialize)dataGridView1).EndInit();
|
||||||
materialCard1.ResumeLayout(false);
|
materialCard1.ResumeLayout(false);
|
||||||
materialCard1.PerformLayout();
|
materialCard1.PerformLayout();
|
||||||
((System.ComponentModel.ISupportInitialize)videoView1).EndInit();
|
|
||||||
tabPage3.ResumeLayout(false);
|
tabPage3.ResumeLayout(false);
|
||||||
navPanel.ResumeLayout(false);
|
navPanel.ResumeLayout(false);
|
||||||
ResumeLayout(false);
|
ResumeLayout(false);
|
||||||
@@ -761,7 +737,6 @@ namespace FATrace.OEMApp
|
|||||||
private Button btnStopLoadVideo;
|
private Button btnStopLoadVideo;
|
||||||
private ProgressBar DownloadProgressBar;
|
private ProgressBar DownloadProgressBar;
|
||||||
private ReaLTaiizor.Controls.MetroProgressBar metroProgressBar1;
|
private ReaLTaiizor.Controls.MetroProgressBar metroProgressBar1;
|
||||||
private LibVLCSharp.WinForms.VideoView videoView1;
|
|
||||||
private ReaLTaiizor.Controls.MaterialCard materialCard1;
|
private ReaLTaiizor.Controls.MaterialCard materialCard1;
|
||||||
private ReaLTaiizor.Controls.PoisonDateTime PdtHistorySearchStart;
|
private ReaLTaiizor.Controls.PoisonDateTime PdtHistorySearchStart;
|
||||||
private Label label1;
|
private Label label1;
|
||||||
@@ -772,7 +747,6 @@ namespace FATrace.OEMApp
|
|||||||
private Label label4;
|
private Label label4;
|
||||||
private TextBox txtSearchCode;
|
private TextBox txtSearchCode;
|
||||||
private DataGridView dataGridView1;
|
private DataGridView dataGridView1;
|
||||||
private Button btnStopHistoryPlay;
|
|
||||||
private ReaLTaiizor.Controls.MaterialCard materialCard2;
|
private ReaLTaiizor.Controls.MaterialCard materialCard2;
|
||||||
private Label label5;
|
private Label label5;
|
||||||
private Label label6;
|
private Label label6;
|
||||||
|
|||||||
@@ -4,12 +4,14 @@ using FATrace.HKNetLib.Wrapper;
|
|||||||
using FATrace.Model;
|
using FATrace.Model;
|
||||||
using FATrace.OEMApp.Services;
|
using FATrace.OEMApp.Services;
|
||||||
using FATrace.OEMApp.Model;
|
using FATrace.OEMApp.Model;
|
||||||
|
using System.Diagnostics;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using LibVLCSharp.Shared;
|
using LibVLCSharp.Shared;
|
||||||
using NLog;
|
using NLog;
|
||||||
using ReaLTaiizor.Forms;
|
using ReaLTaiizor.Forms;
|
||||||
using System.Collections.Concurrent;
|
using System.Collections.Concurrent;
|
||||||
using System.ComponentModel;
|
using System.ComponentModel;
|
||||||
|
using System.Threading;
|
||||||
using TaskStatus = FATrace.Model.TaskStatus;
|
using TaskStatus = FATrace.Model.TaskStatus;
|
||||||
|
|
||||||
namespace FATrace.OEMApp
|
namespace FATrace.OEMApp
|
||||||
@@ -41,6 +43,11 @@ namespace FATrace.OEMApp
|
|||||||
private int _lvLogMaxItems = 1000;
|
private int _lvLogMaxItems = 1000;
|
||||||
private int _lastProgressLogged = -1;
|
private int _lastProgressLogged = -1;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 关闭确认标记:用于避免重复弹窗(如关闭过程触发多次 OnFormClosing)
|
||||||
|
/// </summary>
|
||||||
|
private bool _closeConfirmed;
|
||||||
|
|
||||||
private void InitLvLog()
|
private void InitLvLog()
|
||||||
{
|
{
|
||||||
try
|
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); }
|
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));
|
private void LogInfo(string msg) => AppendLog("INFO", msg, Color.FromArgb(33, 33, 33));
|
||||||
@@ -134,7 +144,7 @@ namespace FATrace.OEMApp
|
|||||||
/// PLC数据服务
|
/// PLC数据服务
|
||||||
/// </summary>
|
/// </summary>
|
||||||
private PLCDataService PLCDataService { get; set; }
|
private PLCDataService PLCDataService { get; set; }
|
||||||
private TimeClearDataService TimeClearService { get; set; }
|
//private TimeClearDataService TimeClearService { get; set; }
|
||||||
private System.Windows.Forms.Timer _statusTimer;
|
private System.Windows.Forms.Timer _statusTimer;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -162,7 +172,10 @@ namespace FATrace.OEMApp
|
|||||||
{
|
{
|
||||||
HkCameraClient.NVRLoadVideoProcessEventHandler += HkCameraClient_NVRLoadVideoProcessEventHandler;
|
HkCameraClient.NVRLoadVideoProcessEventHandler += HkCameraClient_NVRLoadVideoProcessEventHandler;
|
||||||
}
|
}
|
||||||
catch { }
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
LogError($"AppendLog: {ex.Message}");
|
||||||
|
}
|
||||||
|
|
||||||
//读取配置
|
//读取配置
|
||||||
//HkCameraClient.NVR_IP = ConfigHelper.GetValue("NVRIP");
|
//HkCameraClient.NVR_IP = ConfigHelper.GetValue("NVRIP");
|
||||||
@@ -198,7 +211,6 @@ namespace FATrace.OEMApp
|
|||||||
//NVR登录
|
//NVR登录
|
||||||
NVRLogin();
|
NVRLogin();
|
||||||
|
|
||||||
InitMediaPlayer();
|
|
||||||
InitHistoryGridBinding();
|
InitHistoryGridBinding();
|
||||||
|
|
||||||
// 启动后台任务服务:下载队列(单线程顺序)与 Jellyfin 批量监控(并行匹配)
|
// 启动后台任务服务:下载队列(单线程顺序)与 Jellyfin 批量监控(并行匹配)
|
||||||
@@ -212,11 +224,13 @@ namespace FATrace.OEMApp
|
|||||||
try { DownloadTaskWorker.Instance.TaskFailed += OnTaskFailed; } catch { }
|
try { DownloadTaskWorker.Instance.TaskFailed += OnTaskFailed; } catch { }
|
||||||
// JellyfinMonitorQueueService.Instance.Start();
|
// JellyfinMonitorQueueService.Instance.Start();
|
||||||
// LogInfo("Jellyfin 监控服务已启动");
|
// LogInfo("Jellyfin 监控服务已启动");
|
||||||
LogInfo("Jellyfin 监控服务已停用");
|
//LogInfo("Jellyfin 监控服务已停用");
|
||||||
TimeClearService = new TimeClearDataService();
|
|
||||||
TimeClearService.Info += (m) => LogInfo($"[清理]{m}");
|
//TimeClearService = new TimeClearDataService();
|
||||||
TimeClearService.Start();
|
//TimeClearService.Info += (m) => LogInfo($"[清理]{m}");
|
||||||
LogInfo("定时清理服务已启动");
|
//TimeClearService.Start();
|
||||||
|
|
||||||
|
//LogInfo("定时清理服务已启动");
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
@@ -230,7 +244,7 @@ namespace FATrace.OEMApp
|
|||||||
RefreshRuLogGrid();
|
RefreshRuLogGrid();
|
||||||
|
|
||||||
// 初始化底部连接状态(立即检测一次 + 定时轻量检测)
|
// 初始化底部连接状态(立即检测一次 + 定时轻量检测)
|
||||||
SafeSetStatus(tslPlcConnection, PLCDataService?.PlcConnected == true, "Plc连接状态");
|
//SafeSetStatus(tslPlcConnection, PLCDataService?.PlcConnected == true, "Plc连接状态");
|
||||||
_ = UpdateDbStatusAsync();
|
_ = UpdateDbStatusAsync();
|
||||||
_ = UpdateNasStatusAsync();
|
_ = UpdateNasStatusAsync();
|
||||||
_ = UpdateNvrStatusAsync();
|
_ = UpdateNvrStatusAsync();
|
||||||
@@ -464,42 +478,41 @@ namespace FATrace.OEMApp
|
|||||||
|
|
||||||
#region 视频播放
|
#region 视频播放
|
||||||
|
|
||||||
private LibVLC _libVLC;
|
private static async Task<bool> FileExistsWithTimeoutAsync(string path, int timeoutMs, CancellationToken cancellationToken)
|
||||||
private MediaPlayer _mediaPlayer;
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 初始化MediaPlay
|
|
||||||
/// </summary>
|
|
||||||
private void InitMediaPlayer()
|
|
||||||
{
|
{
|
||||||
_libVLC = new LibVLC();
|
var task = Task.Run(() => File.Exists(path), cancellationToken);
|
||||||
_mediaPlayer = new MediaPlayer(_libVLC);
|
var done = await Task.WhenAny(task, Task.Delay(timeoutMs, cancellationToken));
|
||||||
videoView1.MediaPlayer = _mediaPlayer;
|
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
|
#endregion
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 停止播放当前的视频文件
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="sender"></param>
|
|
||||||
/// <param name="e"></param>
|
|
||||||
private void btnStopHistoryPlay_Click(object sender, EventArgs e)
|
|
||||||
{
|
|
||||||
_mediaPlayer.Stop();
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 清理播放资源
|
|
||||||
/// </summary>
|
|
||||||
private void CleanMediaPlay()
|
|
||||||
{
|
|
||||||
_mediaPlayer.Stop();
|
|
||||||
_mediaPlayer.Dispose();
|
|
||||||
_libVLC.Dispose();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
#region 历史数据查询
|
#region 历史数据查询
|
||||||
|
|
||||||
@@ -582,7 +595,7 @@ namespace FATrace.OEMApp
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// 双击行,播放该行对应的视频文件
|
/// 双击行,播放该行对应的视频文件
|
||||||
/// </summary>
|
/// </summary>
|
||||||
private void DataGridView1_CellDoubleClick(object? sender, DataGridViewCellEventArgs e)
|
private async void DataGridView1_CellDoubleClick(object? sender, DataGridViewCellEventArgs e)
|
||||||
{
|
{
|
||||||
if (e.RowIndex < 0) return; // 双击列头等
|
if (e.RowIndex < 0) return; // 双击列头等
|
||||||
try
|
try
|
||||||
@@ -596,14 +609,16 @@ namespace FATrace.OEMApp
|
|||||||
MessageBox.Show("该记录没有可播放的视频路径。", "播放提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
|
MessageBox.Show("该记录没有可播放的视频路径。", "播放提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
|
||||||
return;
|
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;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
_mediaPlayer?.Stop();
|
OpenVideoWithDefaultPlayer(path);
|
||||||
_mediaPlayer?.Play(new LibVLCSharp.Shared.Media(_libVLC, path));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
@@ -673,6 +688,13 @@ namespace FATrace.OEMApp
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 隐藏视频路径列(仍保留数据用于双击播放)
|
||||||
|
if (propName == nameof(OEMRawUse.VideoFilePath))
|
||||||
|
{
|
||||||
|
col.Visible = false;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
// 仅显示指定字段,其他隐藏
|
// 仅显示指定字段,其他隐藏
|
||||||
if (!allowedProps.Contains(propName))
|
if (!allowedProps.Contains(propName))
|
||||||
{
|
{
|
||||||
@@ -714,13 +736,29 @@ namespace FATrace.OEMApp
|
|||||||
/// <param name="e"></param>
|
/// <param name="e"></param>
|
||||||
private void btnTestAction_Click(object sender, EventArgs e)
|
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(
|
var taskId = DownloadTaskWorker.Instance.Enqueue(
|
||||||
CurParsedCodeInfo,
|
CurParsedCodeInfo,
|
||||||
user: CurUserName,
|
user: CurUserName,
|
||||||
start: DateTime.Now.AddDays(-2),
|
start: DateTime.Now,
|
||||||
end: DateTime.Now.AddDays(-2).AddSeconds(DownloadTaskWorker.VideoTime)
|
end: DateTime.Now.AddSeconds(DownloadTaskWorker.VideoTime)
|
||||||
);
|
);
|
||||||
//MessageBox.Show($"[Test] 已入队下载任务,Id={taskId}");
|
//MessageBox.Show($"[Test] 已入队下载任务,Id={taskId}");
|
||||||
}
|
}
|
||||||
@@ -965,6 +1003,7 @@ namespace FATrace.OEMApp
|
|||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
|
LogError($"[gridRULog] 刷新失败: {ex.Message}");
|
||||||
System.Diagnostics.Debug.WriteLine($"[gridRULog] 刷新失败: {ex.Message}");
|
System.Diagnostics.Debug.WriteLine($"[gridRULog] 刷新失败: {ex.Message}");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -992,7 +1031,10 @@ namespace FATrace.OEMApp
|
|||||||
_ = SaveCsvForTaskAsync(t);
|
_ = SaveCsvForTaskAsync(t);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch { }
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
LogError($"[OnTaskStatusChanged] 失败: {ex.Message}");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void OnTaskFailed(DownloadTask t, string? error)
|
private void OnTaskFailed(DownloadTask t, string? error)
|
||||||
@@ -1011,7 +1053,10 @@ namespace FATrace.OEMApp
|
|||||||
// 失败同样清零进度
|
// 失败同样清零进度
|
||||||
ResetProgressBar();
|
ResetProgressBar();
|
||||||
}
|
}
|
||||||
catch { }
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
LogError($"[OnTaskFailed] 失败: {ex.Message}");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void UpsertRuLogRowFromTask(DownloadTask t)
|
private void UpsertRuLogRowFromTask(DownloadTask t)
|
||||||
@@ -1098,7 +1143,10 @@ namespace FATrace.OEMApp
|
|||||||
txtCsvSaveState.ForeColor = ok ? Color.ForestGreen : Color.DarkRed;
|
txtCsvSaveState.ForeColor = ok ? Color.ForestGreen : Color.DarkRed;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch { }
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
LogError($"[SafeSetCsvState] 失败: {ex.Message}");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void SetDataGridViewDoubleBuffered(DataGridView dgv)
|
private static void SetDataGridViewDoubleBuffered(DataGridView dgv)
|
||||||
@@ -1123,29 +1171,6 @@ namespace FATrace.OEMApp
|
|||||||
HkCameraClient.Sdk_NET_DVR_StopGetFile();
|
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);
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 当前下载文件的名称改变
|
/// 当前下载文件的名称改变
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -1165,7 +1190,10 @@ namespace FATrace.OEMApp
|
|||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch { }
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
LogError($"OnDownloadFileNameChanged: {ex.Message}");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void TouchSocketServer_ClientConnected(object? sender, TouchSocketServer.ClientConnectedEventArgs e)
|
private void TouchSocketServer_ClientConnected(object? sender, TouchSocketServer.ClientConnectedEventArgs e)
|
||||||
@@ -1208,8 +1236,9 @@ namespace FATrace.OEMApp
|
|||||||
end: DateTime.Now
|
end: DateTime.Now
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
catch
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
|
LogError($"TouchSocketServer_DataReceived: {ex.Message}");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1245,7 +1274,10 @@ namespace FATrace.OEMApp
|
|||||||
};
|
};
|
||||||
_statusTimer.Start();
|
_statusTimer.Start();
|
||||||
}
|
}
|
||||||
catch { }
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
LogError($"StartStatusTimer: {ex.Message}");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void SafeSetStatus(ToolStripStatusLabel lbl, bool ok, string title)
|
private void SafeSetStatus(ToolStripStatusLabel lbl, bool ok, string title)
|
||||||
@@ -1263,7 +1295,10 @@ namespace FATrace.OEMApp
|
|||||||
lbl.Text = text; lbl.ForeColor = fore;
|
lbl.Text = text; lbl.ForeColor = fore;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch { }
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
LogError($"SafeSetStatus: {ex.Message}");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private async Task UpdateDbStatusAsync()
|
private async Task UpdateDbStatusAsync()
|
||||||
@@ -1306,5 +1341,57 @@ namespace FATrace.OEMApp
|
|||||||
SafeSetStatus(tslNVRConnection, ok, "NVR连接状态");
|
SafeSetStatus(tslNVRConnection, ok, "NVR连接状态");
|
||||||
}
|
}
|
||||||
#endregion
|
#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}");
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -128,7 +128,7 @@
|
|||||||
AAEAAAD/////AQAAAAAAAAAMAgAAAEZTeXN0ZW0uV2luZG93cy5Gb3JtcywgQ3VsdHVyZT1uZXV0cmFs
|
AAEAAAD/////AQAAAAAAAAAMAgAAAEZTeXN0ZW0uV2luZG93cy5Gb3JtcywgQ3VsdHVyZT1uZXV0cmFs
|
||||||
LCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5BQEAAAAmU3lzdGVtLldpbmRvd3MuRm9ybXMu
|
LCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5BQEAAAAmU3lzdGVtLldpbmRvd3MuRm9ybXMu
|
||||||
SW1hZ2VMaXN0U3RyZWFtZXIBAAAABERhdGEHAgIAAAAJAwAAAA8DAAAAaCEAAAJNU0Z0AUkBTAIBAQgB
|
SW1hZ2VMaXN0U3RyZWFtZXIBAAAABERhdGEHAgIAAAAJAwAAAA8DAAAAaCEAAAJNU0Z0AUkBTAIBAQgB
|
||||||
AAHoAQEB6AEBARABAAEQAQAE/wEhAQAI/wFCAU0BNgcAATYDAAEoAwABQAMAATADAAEBAQABIAYAATD/
|
AAEwAQIBMAECARABAAEQAQAE/wEhAQAI/wFCAU0BNgcAATYDAAEoAwABQAMAATADAAEBAQABIAYAATD/
|
||||||
AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AFIAAdsBlgESAf8B2wGWARIB/wQAAxIBGANJAYgB
|
AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AFIAAdsBlgESAf8B2wGWARIB/wQAAxIBGANJAYgB
|
||||||
2wGWARIB/wHbAZYBEgH/AdsBlgESAf8B2wGWARIB/wHbAZYBEgH/AdsBlgESAf8B2wGWARIB/wQAAdsB
|
2wGWARIB/wHbAZYBEgH/AdsBlgESAf8B2wGWARIB/wHbAZYBEgH/AdsBlgESAf8B2wGWARIB/wQAAdsB
|
||||||
lgESAf8B2wGWARIB/wHbAZYBEgH/AdsBlgESAf8B2wGWARIB/wHbAZYBEgH/AdsBlgESAf8UAAHbAZYB
|
lgESAf8B2wGWARIB/wHbAZYBEgH/AdsBlgESAf8B2wGWARIB/wHbAZYBEgH/AdsBlgESAf8UAAHbAZYB
|
||||||
@@ -280,8 +280,8 @@
|
|||||||
<value>
|
<value>
|
||||||
AAEAAAD/////AQAAAAAAAAAMAgAAAEZTeXN0ZW0uV2luZG93cy5Gb3JtcywgQ3VsdHVyZT1uZXV0cmFs
|
AAEAAAD/////AQAAAAAAAAAMAgAAAEZTeXN0ZW0uV2luZG93cy5Gb3JtcywgQ3VsdHVyZT1uZXV0cmFs
|
||||||
LCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5BQEAAAAmU3lzdGVtLldpbmRvd3MuRm9ybXMu
|
LCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5BQEAAAAmU3lzdGVtLldpbmRvd3MuRm9ybXMu
|
||||||
SW1hZ2VMaXN0U3RyZWFtZXIBAAAABERhdGEHAgIAAAAJAwAAAA8DAAAA9gUAAAJNU0Z0AUkBTAMBAQAB
|
SW1hZ2VMaXN0U3RyZWFtZXIBAAAABERhdGEHAgIAAAAJAwAAAA8DAAAA9AUAAAJNU0Z0AUkBTAMBAQAB
|
||||||
QAEAAUABAAEQAQABEAEABP8BIQEACP8BQgFNATYHAAE2AwABKAMAAUADAAEQAwABAQEAASAGAAEQKgAB
|
iAEAAYgBAAEQAQABEAEABP8BIQEACP8BQgFNATYHAAE2AwABKAMAAUADAAEQAwABAQEAASAGAAEQKgAB
|
||||||
2wGWARIB/wHbAZYBEgH/AdsBlgESAf8B2wGWARIB/wHbAZYBEgH/5AAB2wGWARIB/wHbAZYBEgH/AdsB
|
2wGWARIB/wHbAZYBEgH/AdsBlgESAf8B2wGWARIB/wHbAZYBEgH/5AAB2wGWARIB/wHbAZYBEgH/AdsB
|
||||||
lgESAf8B2wGWARIB/wHbAZYBEgH/AdsBlgESAf8B2wGWARIB/wHbAZYBEgH/AdsBlgESAf/YAAHbAZYB
|
lgESAf8B2wGWARIB/wHbAZYBEgH/AdsBlgESAf8B2wGWARIB/wHbAZYBEgH/AdsBlgESAf/YAAHbAZYB
|
||||||
EgH/AdsBlgESAf8B2wGWARIB/wHbAZYBEgH/AdsBlgESAf8B2wGWARIB/wHbAZYBEgH/AdsBlgESAf8B
|
EgH/AdsBlgESAf8B2wGWARIB/wHbAZYBEgH/AdsBlgESAf8B2wGWARIB/wHbAZYBEgH/AdsBlgESAf8B
|
||||||
@@ -298,15 +298,15 @@
|
|||||||
/wHbAZYBEgH/AdsBlgESAf/EAAHbAZYBEgH/AdsBlgESAf8B2wGWARIB/wHbAZYBEgH/AdsBlgESAf8B
|
/wHbAZYBEgH/AdsBlgESAf/EAAHbAZYBEgH/AdsBlgESAf8B2wGWARIB/wHbAZYBEgH/AdsBlgESAf8B
|
||||||
2wGWARIB/wHbAZYBEgH/AdsBlgESAf8B2wGWARIB/wHbAZYBEgH/AdsBlgESAf8B2wGWARIB/wHbAZYB
|
2wGWARIB/wHbAZYBEgH/AdsBlgESAf8B2wGWARIB/wHbAZYBEgH/AdsBlgESAf8B2wGWARIB/wHbAZYB
|
||||||
EgH/AdsBlgESAf8B2wGWARIB/8QAAxIBGAHbAZYBEgH/AdsBlgESAf8B2wGWARIB/wHbAZYBEgH/AdsB
|
EgH/AdsBlgESAf8B2wGWARIB/8QAAxIBGAHbAZYBEgH/AdsBlgESAf8B2wGWARIB/wHbAZYBEgH/AdsB
|
||||||
lgESAf8B2wGWARIB/wQAAVsCWgG/AdsBlgESAf8B2wGWARIB/wHbAZYBEgH/AdsBlgESAf8B2wGWARIB
|
lgESAf8B2wGWARIB/wQAA1oBvwHbAZYBEgH/AdsBlgESAf8B2wGWARIB/wHbAZYBEgH/AdsBlgESAf/M
|
||||||
/8wAAdsBlgESAf8B2wGWARIB/wHbAZYBEgH/AdsBlgESAf8B2wGWARIB/wHbAZYBEgH/CAAB2wGWARIB
|
AAHbAZYBEgH/AdsBlgESAf8B2wGWARIB/wHbAZYBEgH/AdsBlgESAf8B2wGWARIB/wgAAdsBlgESAf8B
|
||||||
/wHbAZYBEgH/AdsBlgESAf8B2wGWARIB/wHbAZYBEgH/0AAB2wGWARIB/wHbAZYBEgH/AdsBlgESAf8B
|
2wGWARIB/wHbAZYBEgH/AdsBlgESAf8B2wGWARIB/9AAAdsBlgESAf8B2wGWARIB/wHbAZYBEgH/AdsB
|
||||||
2wGWARIB/wHbAZYBEgH/AdsBlgESAf8DRAF4AdsBlgESAf8B2wGWARIB/wHbAZYBEgH/AdsBlgESAf/Y
|
lgESAf8B2wGWARIB/wHbAZYBEgH/A0QBeAHbAZYBEgH/AdsBlgESAf8B2wGWARIB/wHbAZYBEgH/2AAB
|
||||||
AAHbAZYBEgH/AdsBlgESAf8B2wGWARIB/wHbAZYBEgH/AdsBlgESAf8B2wGWARIB/wHbAZYBEgH/AdsB
|
2wGWARIB/wHbAZYBEgH/AdsBlgESAf8B2wGWARIB/wHbAZYBEgH/AdsBlgESAf8B2wGWARIB/wHbAZYB
|
||||||
lgESAf8B2wGWARIB/+AAAxIBGAHbAZYBEgH/AdsBlgESAf8B2wGWARIB/wHbAZYBEgH/AdsBlgESAf//
|
EgH/AdsBlgESAf/gAAMSARgB2wGWARIB/wHbAZYBEgH/AdsBlgESAf8B2wGWARIB/wHbAZYBEgH//wDV
|
||||||
ANUAAUIBTQE+BwABPgMAASgDAAFAAwABEAMAAQEBAAEBBQABgBcAA/8BAAH8AR8GAAHwAQcGAAHgAQMG
|
AAFCAU0BPgcAAT4DAAEoAwABQAMAARADAAEBAQABAQUAAYAXAAP/AQAB/AEfBgAB8AEHBgAB4AEDBgAB
|
||||||
AAHBAYEGAALBBgABgQGABgABgQGABgABgwGABgABgAHABgABgAcAAYABgQYAAcABwQYAAeABAwYAAfAB
|
wQGBBgACwQYAAYEBgAYAAYEBgAYAAYMBgAYAAYABwAYAAYAHAAGAAYEGAAHAAcEGAAHgAQMGAAHwAQcG
|
||||||
BwYAAfgBHwYAAv8GAAs=
|
AAH4AR8GAAL/BgAL
|
||||||
</value>
|
</value>
|
||||||
</data>
|
</data>
|
||||||
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
|
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
|
||||||
|
|||||||
@@ -74,6 +74,10 @@ namespace FATrace.WPLApp
|
|||||||
// 应用主题样式
|
// 应用主题样式
|
||||||
Syncfusion.SfSkinManager.SfSkinManager.ApplyStylesOnApplication = true;
|
Syncfusion.SfSkinManager.SfSkinManager.ApplyStylesOnApplication = true;
|
||||||
|
|
||||||
|
//从容器中获取MainView的实例对象
|
||||||
|
var container = ContainerLocator.Container;
|
||||||
|
var shell = container.Resolve<object>("MainView");
|
||||||
|
|
||||||
// 先显示 Shell,避免耗时初始化阻塞界面呈现
|
// 先显示 Shell,避免耗时初始化阻塞界面呈现
|
||||||
base.OnInitialized();
|
base.OnInitialized();
|
||||||
|
|
||||||
@@ -81,7 +85,7 @@ namespace FATrace.WPLApp
|
|||||||
LogService = Container.Resolve<ILogService>();
|
LogService = Container.Resolve<ILogService>();
|
||||||
LogService.Info("OnInitialized-UI Ready");
|
LogService.Info("OnInitialized-UI Ready");
|
||||||
|
|
||||||
if (Current.MainWindow is Window view)
|
if (shell is Window view)
|
||||||
{
|
{
|
||||||
var regionManager = Container.Resolve<IRegionManager>();
|
var regionManager = Container.Resolve<IRegionManager>();
|
||||||
RegionManager.SetRegionManager(view, regionManager);
|
RegionManager.SetRegionManager(view, regionManager);
|
||||||
@@ -98,9 +102,9 @@ namespace FATrace.WPLApp
|
|||||||
LogService?.Error("Current.MainWindow 为 null,执行回退创建 MainView");
|
LogService?.Error("Current.MainWindow 为 null,执行回退创建 MainView");
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
var fallback = new MainView();
|
//var fallback = new MainView();
|
||||||
Current.MainWindow = fallback;
|
//Current.MainWindow = fallback;
|
||||||
fallback.Show();
|
//fallback.Show();
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
@@ -161,26 +165,8 @@ namespace FATrace.WPLApp
|
|||||||
regionAdapterMappings.RegisterMapping(typeof(SfNavigationDrawer), Container.Resolve<SfNavigationDrawerRegionAdapter>());
|
regionAdapterMappings.RegisterMapping(typeof(SfNavigationDrawer), Container.Resolve<SfNavigationDrawerRegionAdapter>());
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override Window CreateShell()
|
protected override Window CreateShell() => null;
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
return Container.Resolve<MainView>();
|
|
||||||
}
|
|
||||||
catch (Exception ex)
|
|
||||||
{
|
|
||||||
// 记录并回退到直接创建,避免因容器解析失败导致无界面
|
|
||||||
Debug.WriteLine($"CreateShell 容器解析 MainView 失败: {ex}");
|
|
||||||
try
|
|
||||||
{
|
|
||||||
return new MainView();
|
|
||||||
}
|
|
||||||
catch
|
|
||||||
{
|
|
||||||
throw; // 让全局异常处理捕获
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
protected override void RegisterTypes(IContainerRegistry containerRegistry)
|
protected override void RegisterTypes(IContainerRegistry containerRegistry)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -16,7 +16,7 @@
|
|||||||
WindowStartupLocation="CenterScreen"
|
WindowStartupLocation="CenterScreen"
|
||||||
WindowState="Maximized"
|
WindowState="Maximized"
|
||||||
WindowStyle="None"
|
WindowStyle="None"
|
||||||
mc:Ignorable="d">
|
mc:Ignorable="d" Closing="ChromelessWindow_Closing" Closed="ChromelessWindow_Closed">
|
||||||
<syncfusion:ChromelessWindow.Resources>
|
<syncfusion:ChromelessWindow.Resources>
|
||||||
<!-- NavigationItem的容器样式 {Binding IsParent} -->
|
<!-- NavigationItem的容器样式 {Binding IsParent} -->
|
||||||
<Style x:Key="NavItemStyle" TargetType="syncfusion:NavigationItem">
|
<Style x:Key="NavItemStyle" TargetType="syncfusion:NavigationItem">
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
using FATrace.WPLApp.Services;
|
||||||
using Syncfusion.Windows.Shared;
|
using Syncfusion.Windows.Shared;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
using System.Windows;
|
using System.Windows;
|
||||||
@@ -17,9 +18,43 @@ namespace FATrace.WPLApp.Views
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public partial class MainView : ChromelessWindow
|
public partial class MainView : ChromelessWindow
|
||||||
{
|
{
|
||||||
public MainView()
|
public MainView(ILogService logService)
|
||||||
{
|
{
|
||||||
InitializeComponent();
|
InitializeComponent();
|
||||||
|
LogService = logService;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public ILogService LogService { get; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 主界面正要关闭
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="sender"></param>
|
||||||
|
/// <param name="e"></param>
|
||||||
|
private void ChromelessWindow_Closing(object sender, System.ComponentModel.CancelEventArgs e)
|
||||||
|
{
|
||||||
|
// 弹窗提示是否确定要退出
|
||||||
|
MessageBoxResult result = MessageBox.Show("您确定要退出程序吗?退出后【产线上扫码-喷码-读码】功能将无法使用】!请确认后再操作。", "提示", MessageBoxButton.OKCancel, MessageBoxImage.None, MessageBoxResult.Cancel);
|
||||||
|
//System.Console.WriteLine(result);
|
||||||
|
if (result == MessageBoxResult.Cancel)
|
||||||
|
{
|
||||||
|
e.Cancel = true; // 中断点击事件
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
LogService.Info("Windows关闭");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 主界面完成关闭
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="sender"></param>
|
||||||
|
/// <param name="e"></param>
|
||||||
|
private void ChromelessWindow_Closed(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
Environment.Exit(0); // 强制结束
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user