This commit is contained in:
TD 2025-04-16 08:47:59 +08:00
parent b009a7355b
commit d2f3b3f3aa
7 changed files with 825 additions and 403 deletions

View File

@ -10,6 +10,7 @@ using DVPCameraType;
using OpenCvSharp; using OpenCvSharp;
using OpenCvSharp.Extensions; using OpenCvSharp.Extensions;
using static System.Net.Mime.MediaTypeNames; using static System.Net.Mime.MediaTypeNames;
using static MvCamCtrl.NET.MyCamera;
using LogLevel = DH.Commons.Enums.EnumHelper.LogLevel; using LogLevel = DH.Commons.Enums.EnumHelper.LogLevel;
@ -62,6 +63,7 @@ namespace DH.Devices.Camera
{ {
try try
{ {
pCallBackFunc = new DVPCamera.dvpEventCallback(cbExceptiondelegate);
nRet = DVPCamera.dvpOpenByUserId(CameraName, nRet = DVPCamera.dvpOpenByUserId(CameraName,
dvpOpenMode.OPEN_NORMAL, dvpOpenMode.OPEN_NORMAL,
ref m_handle); ref m_handle);
@ -82,13 +84,13 @@ namespace DH.Devices.Camera
nRet = DVPCamera.dvpGetCameraInfo(m_handle, ref camerainfo); nRet = DVPCamera.dvpGetCameraInfo(m_handle, ref camerainfo);
SerialNumber = camerainfo.SerialNumber; SerialNumber = camerainfo.SerialNumber;
// ch:注册异常回调函数 | en:Register Exception Callback //ch: 注册异常回调函数 | en:Register Exception Callback
//nRet = DVPCamera.dvpRegisterEventCallback(m_handle, pCallBackFunc, dvpEvent.EVENT_DISCONNECTED, IntPtr.Zero); nRet = DVPCamera.dvpRegisterEventCallback(m_handle, pCallBackFunc, dvpEvent.EVENT_DISCONNECTED, IntPtr.Zero);
//if (nRet != dvpStatus.DVP_STATUS_OK) if (nRet != dvpStatus.DVP_STATUS_OK)
//{ {
// throw new Exception($"Register expection callback failed:{nRet}"); throw new Exception($"Register expection callback failed:{nRet}");
//} }
//GC.KeepAlive(pCallBackFunc); GC.KeepAlive(pCallBackFunc);
//// ch:设置采集连续模式 | en:Set Continues Aquisition Mode //// ch:设置采集连续模式 | en:Set Continues Aquisition Mode
if (IsContinueMode) if (IsContinueMode)
@ -191,7 +193,26 @@ namespace DH.Devices.Camera
} }
/// <summary>
/// 回调函数
/// </summary>
/// <param name="handle"></param>
/// <param name="_event"></param>
/// <param name="pContext"></param>
/// <param name="param"></param>
/// <param name="refVariant"></param>
/// <returns></returns>
public int cbExceptiondelegate(uint handle, dvpEvent _event, IntPtr pContext, int param, ref dvpVariant refVariant)
{
if (_event == dvpEvent.EVENT_DISCONNECTED)
{
}
return dvpStatus.DVP_STATUS_OK.ToInt();
}
private void IIConfig_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e) private void IIConfig_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e)
{ {
@ -490,31 +511,39 @@ namespace DH.Devices.Camera
{ {
try try
{ {
dvpStreamState StreamState = new dvpStreamState();
nRet = DVPCamera.dvpGetStreamState(m_handle, ref StreamState); // 1. 停止采集(如果正在运行)
//Debug.Assert(nRet == dvpStatus.DVP_STATUS_OK); dvpStreamState streamState = new dvpStreamState();
if (StreamState == dvpStreamState.STATE_STARTED) nRet = DVPCamera.dvpGetStreamState(m_handle, ref streamState);
if (streamState == dvpStreamState.STATE_STARTED)
{ {
// stop camera // 先停止采集流
nRet = DVPCamera.dvpStop(m_handle); nRet = DVPCamera.dvpStop(m_handle);
Debug.Assert(nRet == dvpStatus.DVP_STATUS_OK);
if (nRet != dvpStatus.DVP_STATUS_OK) if (nRet != dvpStatus.DVP_STATUS_OK)
{ {
throw new Exception($"Stop grabbing failed{nRet:x8}"); throw new Exception($"停止采集失败错误码0x{nRet:X8}");
} }
} }
// 2. 设置触发源为软件触发(此时设备已停止)
nRet = DVPCamera.dvpSetTriggerState(m_handle, false);
if (nRet != dvpStatus.DVP_STATUS_OK)
{
throw new Exception($"设置软件触发失败错误码0x{nRet:X8}");
}
// 3. 注销事件回调
nRet = DVPCamera.dvpUnregisterEventCallback(m_handle, pCallBackFunc, dvpEvent.EVENT_DISCONNECTED, IntPtr.Zero); nRet = DVPCamera.dvpUnregisterEventCallback(m_handle, pCallBackFunc, dvpEvent.EVENT_DISCONNECTED, IntPtr.Zero);
if (nRet != dvpStatus.DVP_STATUS_OK) if (nRet != dvpStatus.DVP_STATUS_OK)
{ {
throw new Exception($"Unregister expection callback failed:{nRet}"); throw new Exception($"注销事件回调失败错误码0x{nRet:X8}");
} }
// ch:关闭设备 | en:Close device // 4. 关闭设备
nRet = DVPCamera.dvpClose(m_handle); nRet = DVPCamera.dvpClose(m_handle);
if (nRet != dvpStatus.DVP_STATUS_OK) if (nRet != dvpStatus.DVP_STATUS_OK)
{ {
throw new Exception($"Close device failed{nRet:x8}"); throw new Exception($"关闭设备失败错误码0x{nRet:X8}");
} }
m_handle = 0; m_handle = 0;

View File

@ -425,7 +425,7 @@ namespace DH.Devices.Vision
{ {
// throw new ProcessException("异常:模型加载异常", null); // throw new ProcessException("异常:模型加载异常", null);
} }
LogAsync(DateTime.Now, LogLevel.Information, $"模型加载成功是否GPU:{isGPU} CoreInx:{coreInx} - {dc.Name}" + $" {dc.ModelType.GetEnumDescription()}:{dc.ModelPath}"); LogAsync(DateTime.Now, LogLevel.Action, $"模型加载成功是否GPU:{isGPU} CoreInx:{coreInx} - {dc.Name}" + $" {dc.ModelType.GetEnumDescription()}:{dc.ModelPath}");
} }
} }
catch (Exception ex) catch (Exception ex)

View File

@ -28,14 +28,14 @@
/// </summary> /// </summary>
private void InitializeComponent() private void InitializeComponent()
{ {
AntdUI.Tabs.StyleLine styleLine1 = new AntdUI.Tabs.StyleLine(); AntdUI.Tabs.StyleLine styleLine2 = new AntdUI.Tabs.StyleLine();
AntdUI.Tabs.StyleCard styleCard1 = new AntdUI.Tabs.StyleCard(); AntdUI.Tabs.StyleCard styleCard2 = new AntdUI.Tabs.StyleCard();
AntdUI.SegmentedItem segmentedItem1 = new AntdUI.SegmentedItem(); AntdUI.SegmentedItem segmentedItem6 = new AntdUI.SegmentedItem();
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(MainWindow)); System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(MainWindow));
AntdUI.SegmentedItem segmentedItem2 = new AntdUI.SegmentedItem(); AntdUI.SegmentedItem segmentedItem7 = new AntdUI.SegmentedItem();
AntdUI.SegmentedItem segmentedItem3 = new AntdUI.SegmentedItem(); AntdUI.SegmentedItem segmentedItem8 = new AntdUI.SegmentedItem();
AntdUI.SegmentedItem segmentedItem4 = new AntdUI.SegmentedItem(); AntdUI.SegmentedItem segmentedItem9 = new AntdUI.SegmentedItem();
AntdUI.SegmentedItem segmentedItem5 = new AntdUI.SegmentedItem(); AntdUI.SegmentedItem segmentedItem10 = new AntdUI.SegmentedItem();
titlebar = new AntdUI.PageHeader(); titlebar = new AntdUI.PageHeader();
lbName = new AntdUI.Label(); lbName = new AntdUI.Label();
tabsStas = new AntdUI.Tabs(); tabsStas = new AntdUI.Tabs();
@ -65,6 +65,8 @@
panel2 = new AntdUI.Panel(); panel2 = new AntdUI.Panel();
panel1 = new AntdUI.Panel(); panel1 = new AntdUI.Panel();
panel3 = new AntdUI.Panel(); panel3 = new AntdUI.Panel();
textBoxBatchNO = new AntdUI.Input();
btnCreateBatchNO = new AntdUI.Button();
btnDeleteProject = new AntdUI.Button(); btnDeleteProject = new AntdUI.Button();
btnAddProject = new AntdUI.Button(); btnAddProject = new AntdUI.Button();
btnLoadProject = new AntdUI.Button(); btnLoadProject = new AntdUI.Button();
@ -111,7 +113,7 @@
titlebar.Name = "titlebar"; titlebar.Name = "titlebar";
titlebar.ShowButton = true; titlebar.ShowButton = true;
titlebar.ShowIcon = true; titlebar.ShowIcon = true;
titlebar.Size = new Size(1024, 40); titlebar.Size = new Size(1024, 37);
titlebar.SubText = "CCD光学筛选系统"; titlebar.SubText = "CCD光学筛选系统";
titlebar.TabIndex = 0; titlebar.TabIndex = 0;
titlebar.Text = "山东迭慧智能科技有限公司"; titlebar.Text = "山东迭慧智能科技有限公司";
@ -122,7 +124,7 @@
lbName.ForeColor = SystemColors.Window; lbName.ForeColor = SystemColors.Window;
lbName.Location = new Point(746, 0); lbName.Location = new Point(746, 0);
lbName.Name = "lbName"; lbName.Name = "lbName";
lbName.Size = new Size(134, 40); lbName.Size = new Size(134, 37);
lbName.TabIndex = 0; lbName.TabIndex = 0;
lbName.Text = ""; lbName.Text = "";
lbName.TextAlign = ContentAlignment.MiddleRight; lbName.TextAlign = ContentAlignment.MiddleRight;
@ -134,7 +136,7 @@
tabsStas.Name = "tabsStas"; tabsStas.Name = "tabsStas";
tabsStas.Pages.Add(tabPage3); tabsStas.Pages.Add(tabPage3);
tabsStas.Size = new Size(580, 176); tabsStas.Size = new Size(580, 176);
tabsStas.Style = styleLine1; tabsStas.Style = styleLine2;
tabsStas.TabIndex = 3; tabsStas.TabIndex = 3;
tabsStas.Text = "tabs3"; tabsStas.Text = "tabs3";
// //
@ -169,16 +171,16 @@
panelmain.Controls.Add(panel2); panelmain.Controls.Add(panel2);
panelmain.Controls.Add(panel1); panelmain.Controls.Add(panel1);
panelmain.Dock = DockStyle.Fill; panelmain.Dock = DockStyle.Fill;
panelmain.Location = new Point(0, 40); panelmain.Location = new Point(0, 37);
panelmain.Margin = new Padding(0); panelmain.Margin = new Padding(0);
panelmain.Name = "panelmain"; panelmain.Name = "panelmain";
panelmain.Size = new Size(1024, 591); panelmain.Size = new Size(1024, 594);
panelmain.TabIndex = 8; panelmain.TabIndex = 8;
// //
// splitter2 // splitter2
// //
splitter2.Dock = DockStyle.Fill; splitter2.Dock = DockStyle.Fill;
splitter2.Location = new Point(0, 68); splitter2.Location = new Point(0, 83);
splitter2.Name = "splitter2"; splitter2.Name = "splitter2";
splitter2.Orientation = Orientation.Horizontal; splitter2.Orientation = Orientation.Horizontal;
// //
@ -189,8 +191,8 @@
// splitter2.Panel2 // splitter2.Panel2
// //
splitter2.Panel2.Controls.Add(splitter1); splitter2.Panel2.Controls.Add(splitter1);
splitter2.Size = new Size(1024, 523); splitter2.Size = new Size(1024, 511);
splitter2.SplitterDistance = 410; splitter2.SplitterDistance = 400;
splitter2.TabIndex = 4; splitter2.TabIndex = 4;
// //
// tabImgDisplay // tabImgDisplay
@ -198,8 +200,8 @@
tabImgDisplay.Dock = DockStyle.Fill; tabImgDisplay.Dock = DockStyle.Fill;
tabImgDisplay.Location = new Point(0, 0); tabImgDisplay.Location = new Point(0, 0);
tabImgDisplay.Name = "tabImgDisplay"; tabImgDisplay.Name = "tabImgDisplay";
tabImgDisplay.Size = new Size(1024, 410); tabImgDisplay.Size = new Size(1024, 400);
tabImgDisplay.Style = styleCard1; tabImgDisplay.Style = styleCard2;
tabImgDisplay.TabIndex = 3; tabImgDisplay.TabIndex = 3;
tabImgDisplay.Text = "tabs1"; tabImgDisplay.Text = "tabs1";
// //
@ -216,7 +218,7 @@
// splitter1.Panel2 // splitter1.Panel2
// //
splitter1.Panel2.Controls.Add(panel6); splitter1.Panel2.Controls.Add(panel6);
splitter1.Size = new Size(1024, 109); splitter1.Size = new Size(1024, 107);
splitter1.SplitterDistance = 332; splitter1.SplitterDistance = 332;
splitter1.TabIndex = 3; splitter1.TabIndex = 3;
// //
@ -225,7 +227,7 @@
pnlLog.Dock = DockStyle.Fill; pnlLog.Dock = DockStyle.Fill;
pnlLog.Location = new Point(0, 0); pnlLog.Location = new Point(0, 0);
pnlLog.Name = "pnlLog"; pnlLog.Name = "pnlLog";
pnlLog.Size = new Size(332, 109); pnlLog.Size = new Size(332, 107);
pnlLog.TabIndex = 2; pnlLog.TabIndex = 2;
pnlLog.Text = "panel8"; pnlLog.Text = "panel8";
// //
@ -235,7 +237,7 @@
panel6.Dock = DockStyle.Fill; panel6.Dock = DockStyle.Fill;
panel6.Location = new Point(0, 0); panel6.Location = new Point(0, 0);
panel6.Name = "panel6"; panel6.Name = "panel6";
panel6.Size = new Size(688, 109); panel6.Size = new Size(688, 107);
panel6.TabIndex = 0; panel6.TabIndex = 0;
panel6.Text = "panel6"; panel6.Text = "panel6";
// //
@ -251,7 +253,7 @@
tableLayoutstatistics.Name = "tableLayoutstatistics"; tableLayoutstatistics.Name = "tableLayoutstatistics";
tableLayoutstatistics.RowCount = 1; tableLayoutstatistics.RowCount = 1;
tableLayoutstatistics.RowStyles.Add(new RowStyle(SizeType.Percent, 50F)); tableLayoutstatistics.RowStyles.Add(new RowStyle(SizeType.Percent, 50F));
tableLayoutstatistics.Size = new Size(688, 109); tableLayoutstatistics.Size = new Size(688, 107);
tableLayoutstatistics.TabIndex = 9; tableLayoutstatistics.TabIndex = 9;
// //
// dgvCamreaNums // dgvCamreaNums
@ -275,7 +277,7 @@
dgvCamreaNums.ReadOnly = true; dgvCamreaNums.ReadOnly = true;
dgvCamreaNums.RowHeadersVisible = false; dgvCamreaNums.RowHeadersVisible = false;
dgvCamreaNums.SelectionMode = DataGridViewSelectionMode.FullRowSelect; dgvCamreaNums.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
dgvCamreaNums.Size = new Size(338, 94); dgvCamreaNums.Size = new Size(338, 92);
dgvCamreaNums.TabIndex = 9; dgvCamreaNums.TabIndex = 9;
// //
// panelNums // panelNums
@ -284,7 +286,7 @@
panelNums.Dock = DockStyle.Fill; panelNums.Dock = DockStyle.Fill;
panelNums.Location = new Point(347, 3); panelNums.Location = new Point(347, 3);
panelNums.Name = "panelNums"; panelNums.Name = "panelNums";
panelNums.Size = new Size(338, 103); panelNums.Size = new Size(338, 101);
panelNums.TabIndex = 8; panelNums.TabIndex = 8;
panelNums.Text = "panel4"; panelNums.Text = "panel4";
// //
@ -301,7 +303,7 @@
tableLayoutNums.RowStyles.Add(new RowStyle(SizeType.Percent, 50F)); tableLayoutNums.RowStyles.Add(new RowStyle(SizeType.Percent, 50F));
tableLayoutNums.RowStyles.Add(new RowStyle(SizeType.Percent, 50F)); tableLayoutNums.RowStyles.Add(new RowStyle(SizeType.Percent, 50F));
tableLayoutNums.RowStyles.Add(new RowStyle(SizeType.Absolute, 20F)); tableLayoutNums.RowStyles.Add(new RowStyle(SizeType.Absolute, 20F));
tableLayoutNums.Size = new Size(338, 103); tableLayoutNums.Size = new Size(338, 101);
tableLayoutNums.TabIndex = 8; tableLayoutNums.TabIndex = 8;
// //
// dgvProductNums // dgvProductNums
@ -326,16 +328,18 @@
dgvProductNums.RowHeadersBorderStyle = DataGridViewHeaderBorderStyle.None; dgvProductNums.RowHeadersBorderStyle = DataGridViewHeaderBorderStyle.None;
dgvProductNums.RowHeadersVisible = false; dgvProductNums.RowHeadersVisible = false;
dgvProductNums.SelectionMode = DataGridViewSelectionMode.FullRowSelect; dgvProductNums.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
dgvProductNums.Size = new Size(332, 41); dgvProductNums.Size = new Size(332, 40);
dgvProductNums.TabIndex = 10; dgvProductNums.TabIndex = 10;
// //
// tableLayoutPanel3 // tableLayoutPanel3
// //
tableLayoutPanel3.AutoSizeMode = AutoSizeMode.GrowAndShrink;
tableLayoutPanel3.CellBorderStyle = TableLayoutPanelCellBorderStyle.Single;
tableLayoutPanel3.ColumnCount = 4; tableLayoutPanel3.ColumnCount = 4;
tableLayoutPanel3.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 25F)); tableLayoutPanel3.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 21.05263F));
tableLayoutPanel3.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 25F)); tableLayoutPanel3.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 36.84211F));
tableLayoutPanel3.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 25F)); tableLayoutPanel3.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 21.05263F));
tableLayoutPanel3.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 25F)); tableLayoutPanel3.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 21.0526314F));
tableLayoutPanel3.Controls.Add(lblTotalTime, 1, 1); tableLayoutPanel3.Controls.Add(lblTotalTime, 1, 1);
tableLayoutPanel3.Controls.Add(label1, 2, 1); tableLayoutPanel3.Controls.Add(label1, 2, 1);
tableLayoutPanel3.Controls.Add(label12, 0, 1); tableLayoutPanel3.Controls.Add(label12, 0, 1);
@ -345,21 +349,21 @@
tableLayoutPanel3.Controls.Add(label10, 0, 0); tableLayoutPanel3.Controls.Add(label10, 0, 0);
tableLayoutPanel3.Controls.Add(label7, 2, 0); tableLayoutPanel3.Controls.Add(label7, 2, 0);
tableLayoutPanel3.Dock = DockStyle.Fill; tableLayoutPanel3.Dock = DockStyle.Fill;
tableLayoutPanel3.Location = new Point(3, 54); tableLayoutPanel3.Location = new Point(3, 53);
tableLayoutPanel3.Name = "tableLayoutPanel3"; tableLayoutPanel3.Name = "tableLayoutPanel3";
tableLayoutPanel3.RowCount = 2; tableLayoutPanel3.RowCount = 2;
tableLayoutPanel3.RowStyles.Add(new RowStyle(SizeType.Percent, 50F)); tableLayoutPanel3.RowStyles.Add(new RowStyle(SizeType.Percent, 50F));
tableLayoutPanel3.RowStyles.Add(new RowStyle(SizeType.Percent, 50F)); tableLayoutPanel3.RowStyles.Add(new RowStyle(SizeType.Percent, 50F));
tableLayoutPanel3.Size = new Size(332, 46); tableLayoutPanel3.Size = new Size(332, 45);
tableLayoutPanel3.TabIndex = 11; tableLayoutPanel3.TabIndex = 11;
// //
// lblTotalTime // lblTotalTime
// //
lblTotalTime.AutoSize = true; lblTotalTime.AutoSize = true;
lblTotalTime.Dock = DockStyle.Fill; lblTotalTime.Dock = DockStyle.Fill;
lblTotalTime.Location = new Point(86, 23); lblTotalTime.Location = new Point(73, 23);
lblTotalTime.Name = "lblTotalTime"; lblTotalTime.Name = "lblTotalTime";
lblTotalTime.Size = new Size(77, 23); lblTotalTime.Size = new Size(114, 21);
lblTotalTime.TabIndex = 15; lblTotalTime.TabIndex = 15;
lblTotalTime.Text = "0"; lblTotalTime.Text = "0";
lblTotalTime.TextAlign = ContentAlignment.MiddleCenter; lblTotalTime.TextAlign = ContentAlignment.MiddleCenter;
@ -368,20 +372,20 @@
// //
label1.AutoSize = true; label1.AutoSize = true;
label1.Dock = DockStyle.Fill; label1.Dock = DockStyle.Fill;
label1.Location = new Point(169, 23); label1.Location = new Point(194, 23);
label1.Name = "label1"; label1.Name = "label1";
label1.Size = new Size(77, 23); label1.Size = new Size(62, 21);
label1.TabIndex = 8; label1.TabIndex = 8;
label1.Text = "UPH"; label1.Text = "速度/分钟";
label1.TextAlign = ContentAlignment.MiddleCenter; label1.TextAlign = ContentAlignment.MiddleCenter;
// //
// label12 // label12
// //
label12.AutoSize = true; label12.AutoSize = true;
label12.Dock = DockStyle.Fill; label12.Dock = DockStyle.Fill;
label12.Location = new Point(3, 23); label12.Location = new Point(4, 23);
label12.Name = "label12"; label12.Name = "label12";
label12.Size = new Size(77, 23); label12.Size = new Size(62, 21);
label12.TabIndex = 14; label12.TabIndex = 14;
label12.Text = "运行时间"; label12.Text = "运行时间";
label12.TextAlign = ContentAlignment.MiddleCenter; label12.TextAlign = ContentAlignment.MiddleCenter;
@ -390,9 +394,9 @@
// //
lblUPH.AutoSize = true; lblUPH.AutoSize = true;
lblUPH.Dock = DockStyle.Fill; lblUPH.Dock = DockStyle.Fill;
lblUPH.Location = new Point(252, 23); lblUPH.Location = new Point(263, 23);
lblUPH.Name = "lblUPH"; lblUPH.Name = "lblUPH";
lblUPH.Size = new Size(77, 23); lblUPH.Size = new Size(65, 21);
lblUPH.TabIndex = 9; lblUPH.TabIndex = 9;
lblUPH.Text = "0"; lblUPH.Text = "0";
lblUPH.TextAlign = ContentAlignment.MiddleCenter; lblUPH.TextAlign = ContentAlignment.MiddleCenter;
@ -401,9 +405,9 @@
// //
lblStartTime.AutoSize = true; lblStartTime.AutoSize = true;
lblStartTime.Dock = DockStyle.Fill; lblStartTime.Dock = DockStyle.Fill;
lblStartTime.Location = new Point(86, 0); lblStartTime.Location = new Point(73, 1);
lblStartTime.Name = "lblStartTime"; lblStartTime.Name = "lblStartTime";
lblStartTime.Size = new Size(77, 23); lblStartTime.Size = new Size(114, 21);
lblStartTime.TabIndex = 11; lblStartTime.TabIndex = 11;
lblStartTime.Text = "0"; lblStartTime.Text = "0";
lblStartTime.TextAlign = ContentAlignment.MiddleCenter; lblStartTime.TextAlign = ContentAlignment.MiddleCenter;
@ -412,9 +416,9 @@
// //
lblOEE_Total.AutoSize = true; lblOEE_Total.AutoSize = true;
lblOEE_Total.Dock = DockStyle.Fill; lblOEE_Total.Dock = DockStyle.Fill;
lblOEE_Total.Location = new Point(252, 0); lblOEE_Total.Location = new Point(263, 1);
lblOEE_Total.Name = "lblOEE_Total"; lblOEE_Total.Name = "lblOEE_Total";
lblOEE_Total.Size = new Size(77, 23); lblOEE_Total.Size = new Size(65, 21);
lblOEE_Total.TabIndex = 13; lblOEE_Total.TabIndex = 13;
lblOEE_Total.Text = "0"; lblOEE_Total.Text = "0";
lblOEE_Total.TextAlign = ContentAlignment.MiddleCenter; lblOEE_Total.TextAlign = ContentAlignment.MiddleCenter;
@ -423,9 +427,9 @@
// //
label10.AutoSize = true; label10.AutoSize = true;
label10.Dock = DockStyle.Fill; label10.Dock = DockStyle.Fill;
label10.Location = new Point(3, 0); label10.Location = new Point(4, 1);
label10.Name = "label10"; label10.Name = "label10";
label10.Size = new Size(77, 23); label10.Size = new Size(62, 21);
label10.TabIndex = 12; label10.TabIndex = 12;
label10.Text = "开始时间"; label10.Text = "开始时间";
label10.TextAlign = ContentAlignment.MiddleCenter; label10.TextAlign = ContentAlignment.MiddleCenter;
@ -434,9 +438,9 @@
// //
label7.AutoSize = true; label7.AutoSize = true;
label7.Dock = DockStyle.Fill; label7.Dock = DockStyle.Fill;
label7.Location = new Point(169, 0); label7.Location = new Point(194, 1);
label7.Name = "label7"; label7.Name = "label7";
label7.Size = new Size(77, 23); label7.Size = new Size(62, 21);
label7.TabIndex = 10; label7.TabIndex = 10;
label7.Text = "总计数"; label7.Text = "总计数";
label7.TextAlign = ContentAlignment.MiddleCenter; label7.TextAlign = ContentAlignment.MiddleCenter;
@ -459,13 +463,15 @@
panel1.Margin = new Padding(0); panel1.Margin = new Padding(0);
panel1.Name = "panel1"; panel1.Name = "panel1";
panel1.Radius = 0; panel1.Radius = 0;
panel1.Size = new Size(1024, 68); panel1.Size = new Size(1024, 83);
panel1.TabIndex = 0; panel1.TabIndex = 0;
panel1.Text = "panel1"; panel1.Text = "panel1";
// //
// panel3 // panel3
// //
panel3.Back = Color.FromArgb(46, 108, 227); panel3.Back = Color.FromArgb(46, 108, 227);
panel3.Controls.Add(textBoxBatchNO);
panel3.Controls.Add(btnCreateBatchNO);
panel3.Controls.Add(btnDeleteProject); panel3.Controls.Add(btnDeleteProject);
panel3.Controls.Add(btnAddProject); panel3.Controls.Add(btnAddProject);
panel3.Controls.Add(btnLoadProject); panel3.Controls.Add(btnLoadProject);
@ -477,15 +483,32 @@
panel3.Radius = 0; panel3.Radius = 0;
panel3.ShadowOpacity = 0F; panel3.ShadowOpacity = 0F;
panel3.ShadowOpacityHover = 0F; panel3.ShadowOpacityHover = 0F;
panel3.Size = new Size(471, 68); panel3.Size = new Size(471, 83);
panel3.TabIndex = 16; panel3.TabIndex = 16;
panel3.Text = "panel3"; panel3.Text = "panel3";
// //
// textBoxBatchNO
//
textBoxBatchNO.Location = new Point(19, 0);
textBoxBatchNO.Name = "textBoxBatchNO";
textBoxBatchNO.Size = new Size(218, 34);
textBoxBatchNO.TabIndex = 22;
//
// btnCreateBatchNO
//
btnCreateBatchNO.Location = new Point(246, 0);
btnCreateBatchNO.Name = "btnCreateBatchNO";
btnCreateBatchNO.Size = new Size(72, 35);
btnCreateBatchNO.TabIndex = 21;
btnCreateBatchNO.Tag = "sys-load";
btnCreateBatchNO.Text = "生成批次";
btnCreateBatchNO.Click += btnCreateBatchNO_Click;
//
// btnDeleteProject // btnDeleteProject
// //
btnDeleteProject.Location = new Point(400, 18); btnDeleteProject.Location = new Point(394, 40);
btnDeleteProject.Name = "btnDeleteProject"; btnDeleteProject.Name = "btnDeleteProject";
btnDeleteProject.Size = new Size(68, 40); btnDeleteProject.Size = new Size(72, 35);
btnDeleteProject.TabIndex = 19; btnDeleteProject.TabIndex = 19;
btnDeleteProject.Tag = "sys-deletescheme"; btnDeleteProject.Tag = "sys-deletescheme";
btnDeleteProject.Text = "删除"; btnDeleteProject.Text = "删除";
@ -493,9 +516,9 @@
// //
// btnAddProject // btnAddProject
// //
btnAddProject.Location = new Point(326, 18); btnAddProject.Location = new Point(320, 40);
btnAddProject.Name = "btnAddProject"; btnAddProject.Name = "btnAddProject";
btnAddProject.Size = new Size(68, 40); btnAddProject.Size = new Size(72, 35);
btnAddProject.TabIndex = 18; btnAddProject.TabIndex = 18;
btnAddProject.Tag = "sys-addscheme"; btnAddProject.Tag = "sys-addscheme";
btnAddProject.Text = "新增"; btnAddProject.Text = "新增";
@ -503,9 +526,9 @@
// //
// btnLoadProject // btnLoadProject
// //
btnLoadProject.Location = new Point(252, 18); btnLoadProject.Location = new Point(246, 40);
btnLoadProject.Name = "btnLoadProject"; btnLoadProject.Name = "btnLoadProject";
btnLoadProject.Size = new Size(68, 40); btnLoadProject.Size = new Size(72, 35);
btnLoadProject.TabIndex = 17; btnLoadProject.TabIndex = 17;
btnLoadProject.Tag = "sys-loadscheme"; btnLoadProject.Tag = "sys-loadscheme";
btnLoadProject.Text = "载入"; btnLoadProject.Text = "载入";
@ -514,11 +537,11 @@
// sltProjects // sltProjects
// //
sltProjects.List = true; sltProjects.List = true;
sltProjects.Location = new Point(25, 18); sltProjects.Location = new Point(19, 40);
sltProjects.Margin = new Padding(10); sltProjects.Margin = new Padding(10);
sltProjects.MaxCount = 10; sltProjects.MaxCount = 10;
sltProjects.Name = "sltProjects"; sltProjects.Name = "sltProjects";
sltProjects.Size = new Size(214, 40); sltProjects.Size = new Size(218, 35);
sltProjects.TabIndex = 16; sltProjects.TabIndex = 16;
sltProjects.Tag = "sys-schemelist"; sltProjects.Tag = "sys-schemelist";
// //
@ -530,70 +553,70 @@
segmented1.Font = new Font("Microsoft YaHei UI", 9F); segmented1.Font = new Font("Microsoft YaHei UI", 9F);
segmented1.ForeColor = Color.White; segmented1.ForeColor = Color.White;
segmented1.Full = true; segmented1.Full = true;
segmentedItem1.Badge = null; segmentedItem6.Badge = null;
segmentedItem1.BadgeAlign = AntdUI.TAlignFrom.TR; segmentedItem6.BadgeAlign = AntdUI.TAlignFrom.TR;
segmentedItem1.BadgeBack = null; segmentedItem6.BadgeBack = null;
segmentedItem1.BadgeMode = false; segmentedItem6.BadgeMode = false;
segmentedItem1.BadgeOffsetX = 0; segmentedItem6.BadgeOffsetX = 0;
segmentedItem1.BadgeOffsetY = 0; segmentedItem6.BadgeOffsetY = 0;
segmentedItem1.BadgeSize = 0.6F; segmentedItem6.BadgeSize = 0.6F;
segmentedItem1.BadgeSvg = null; segmentedItem6.BadgeSvg = null;
segmentedItem1.IconActiveSvg = resources.GetString("segmentedItem1.IconActiveSvg"); segmentedItem6.IconActiveSvg = resources.GetString("segmentedItem6.IconActiveSvg");
segmentedItem1.IconSvg = resources.GetString("segmentedItem1.IconSvg"); segmentedItem6.IconSvg = resources.GetString("segmentedItem6.IconSvg");
segmentedItem1.Text = "启动"; segmentedItem6.Text = "启动";
segmentedItem2.Badge = null; segmentedItem7.Badge = null;
segmentedItem2.BadgeAlign = AntdUI.TAlignFrom.TR; segmentedItem7.BadgeAlign = AntdUI.TAlignFrom.TR;
segmentedItem2.BadgeBack = null; segmentedItem7.BadgeBack = null;
segmentedItem2.BadgeMode = false; segmentedItem7.BadgeMode = false;
segmentedItem2.BadgeOffsetX = 0; segmentedItem7.BadgeOffsetX = 0;
segmentedItem2.BadgeOffsetY = 0; segmentedItem7.BadgeOffsetY = 0;
segmentedItem2.BadgeSize = 0.6F; segmentedItem7.BadgeSize = 0.6F;
segmentedItem2.BadgeSvg = null; segmentedItem7.BadgeSvg = null;
segmentedItem2.IconActiveSvg = resources.GetString("segmentedItem2.IconActiveSvg"); segmentedItem7.IconActiveSvg = resources.GetString("segmentedItem7.IconActiveSvg");
segmentedItem2.IconSvg = resources.GetString("segmentedItem2.IconSvg"); segmentedItem7.IconSvg = resources.GetString("segmentedItem7.IconSvg");
segmentedItem2.Text = "停止"; segmentedItem7.Text = "停止";
segmentedItem3.Badge = null; segmentedItem8.Badge = null;
segmentedItem3.BadgeAlign = AntdUI.TAlignFrom.TR; segmentedItem8.BadgeAlign = AntdUI.TAlignFrom.TR;
segmentedItem3.BadgeBack = null; segmentedItem8.BadgeBack = null;
segmentedItem3.BadgeMode = false; segmentedItem8.BadgeMode = false;
segmentedItem3.BadgeOffsetX = 0; segmentedItem8.BadgeOffsetX = 0;
segmentedItem3.BadgeOffsetY = 0; segmentedItem8.BadgeOffsetY = 0;
segmentedItem3.BadgeSize = 0.6F; segmentedItem8.BadgeSize = 0.6F;
segmentedItem3.BadgeSvg = null; segmentedItem8.BadgeSvg = null;
segmentedItem3.IconActiveSvg = resources.GetString("segmentedItem3.IconActiveSvg"); segmentedItem8.IconActiveSvg = resources.GetString("segmentedItem8.IconActiveSvg");
segmentedItem3.IconSvg = resources.GetString("segmentedItem3.IconSvg"); segmentedItem8.IconSvg = resources.GetString("segmentedItem8.IconSvg");
segmentedItem3.Text = "复位"; segmentedItem8.Text = "复位";
segmentedItem4.Badge = null; segmentedItem9.Badge = null;
segmentedItem4.BadgeAlign = AntdUI.TAlignFrom.TR; segmentedItem9.BadgeAlign = AntdUI.TAlignFrom.TR;
segmentedItem4.BadgeBack = null; segmentedItem9.BadgeBack = null;
segmentedItem4.BadgeMode = false; segmentedItem9.BadgeMode = false;
segmentedItem4.BadgeOffsetX = 0; segmentedItem9.BadgeOffsetX = 0;
segmentedItem4.BadgeOffsetY = 0; segmentedItem9.BadgeOffsetY = 0;
segmentedItem4.BadgeSize = 0.6F; segmentedItem9.BadgeSize = 0.6F;
segmentedItem4.BadgeSvg = null; segmentedItem9.BadgeSvg = null;
segmentedItem4.IconActiveSvg = resources.GetString("segmentedItem4.IconActiveSvg"); segmentedItem9.IconActiveSvg = resources.GetString("segmentedItem9.IconActiveSvg");
segmentedItem4.IconSvg = resources.GetString("segmentedItem4.IconSvg"); segmentedItem9.IconSvg = resources.GetString("segmentedItem9.IconSvg");
segmentedItem4.Text = "登录"; segmentedItem9.Text = "登录";
segmentedItem5.Badge = null; segmentedItem10.Badge = null;
segmentedItem5.BadgeAlign = AntdUI.TAlignFrom.TR; segmentedItem10.BadgeAlign = AntdUI.TAlignFrom.TR;
segmentedItem5.BadgeBack = null; segmentedItem10.BadgeBack = null;
segmentedItem5.BadgeMode = false; segmentedItem10.BadgeMode = false;
segmentedItem5.BadgeOffsetX = 0; segmentedItem10.BadgeOffsetX = 0;
segmentedItem5.BadgeOffsetY = 0; segmentedItem10.BadgeOffsetY = 0;
segmentedItem5.BadgeSize = 0.6F; segmentedItem10.BadgeSize = 0.6F;
segmentedItem5.BadgeSvg = null; segmentedItem10.BadgeSvg = null;
segmentedItem5.IconActiveSvg = resources.GetString("segmentedItem5.IconActiveSvg"); segmentedItem10.IconActiveSvg = resources.GetString("segmentedItem10.IconActiveSvg");
segmentedItem5.IconSvg = resources.GetString("segmentedItem5.IconSvg"); segmentedItem10.IconSvg = resources.GetString("segmentedItem10.IconSvg");
segmentedItem5.ID = "sys-setbutton"; segmentedItem10.ID = "sys-setbutton";
segmentedItem5.Text = "设置"; segmentedItem10.Text = "设置";
segmented1.Items.Add(segmentedItem1); segmented1.Items.Add(segmentedItem6);
segmented1.Items.Add(segmentedItem2); segmented1.Items.Add(segmentedItem7);
segmented1.Items.Add(segmentedItem3); segmented1.Items.Add(segmentedItem8);
segmented1.Items.Add(segmentedItem4); segmented1.Items.Add(segmentedItem9);
segmented1.Items.Add(segmentedItem5); segmented1.Items.Add(segmentedItem10);
segmented1.Location = new Point(0, 0); segmented1.Location = new Point(0, 0);
segmented1.Name = "segmented1"; segmented1.Name = "segmented1";
segmented1.Size = new Size(491, 68); segmented1.Size = new Size(491, 83);
segmented1.TabIndex = 1; segmented1.TabIndex = 1;
segmented1.Text = "segmented1"; segmented1.Text = "segmented1";
segmented1.SelectIndexChanged += segmented1_SelectIndexChanged; segmented1.SelectIndexChanged += segmented1_SelectIndexChanged;
@ -727,5 +750,7 @@
private AntdUI.Label lbInBackend; private AntdUI.Label lbInBackend;
private DataGridView dgvProductNums; private DataGridView dgvProductNums;
private TableLayoutPanel tableLayoutPanel3; private TableLayoutPanel tableLayoutPanel3;
private AntdUI.Button btnCreateBatchNO;
private AntdUI.Input textBoxBatchNO;
} }
} }

View File

@ -543,11 +543,7 @@ namespace DHSoftware
dgvProductNums.DataSource = ProductSummaries; dgvProductNums.DataSource = ProductSummaries;
dgvCamreaNums.AutoGenerateColumns = false;
dgvCamreaNums.DefaultCellStyle.Font = new Font("Tahoma", 12, FontStyle.Regular, GraphicsUnit.World);
dgvCamreaNums.DataSource = null;
dgvCamreaNums.Columns.Clear(); dgvCamreaNums.Columns.Clear();
// 添加 CCD 列 // 添加 CCD 列
@ -556,6 +552,14 @@ namespace DHSoftware
HeaderText = "CCD", HeaderText = "CCD",
DataPropertyName = "CameraName" DataPropertyName = "CameraName"
}); });
// 添加 触发数 列
var TiggerCountColumn = new DataGridViewTextBoxColumn
{
HeaderText = "触发数",
DataPropertyName = "TiggerCount"
};
dgvCamreaNums.Columns.Add(TiggerCountColumn);
// 添加 合格 列 // 添加 合格 列
var okColumn = new DataGridViewTextBoxColumn var okColumn = new DataGridViewTextBoxColumn
@ -563,7 +567,7 @@ namespace DHSoftware
HeaderText = "合格", HeaderText = "合格",
DataPropertyName = "OKCount" DataPropertyName = "OKCount"
}; };
okColumn.DefaultCellStyle.ForeColor = Color.LightGreen; // 设置背景为绿色 okColumn.DefaultCellStyle.ForeColor = Color.Green; // 设置背景为绿色
dgvCamreaNums.Columns.Add(okColumn); dgvCamreaNums.Columns.Add(okColumn);
// 添加 不合格 列 // 添加 不合格 列
@ -589,7 +593,7 @@ namespace DHSoftware
HeaderText = "良率", HeaderText = "良率",
DataPropertyName = "YieldStr" DataPropertyName = "YieldStr"
}); });
dgvCamreaNums.AutoGenerateColumns = false;
dgvCamreaNums.DataSource = new BindingList<CameraSummary>(CameraSummaries); dgvCamreaNums.DataSource = new BindingList<CameraSummary>(CameraSummaries);
} }
#endregion #endregion
@ -674,14 +678,14 @@ namespace DHSoftware
{ {
Do3ThinkCamera cam =new Do3ThinkCamera(); Do3ThinkCamera cam = new Do3ThinkCamera();
cam.IsSavePicEnabled = cameraBase.IsSavePicEnabled; cam.IsSavePicEnabled = cameraBase.IsSavePicEnabled;
cam.CameraName = cameraBase.CameraName; cam.CameraName = cameraBase.CameraName;
cam.CameraIP = cameraBase.CameraIP; cam.CameraIP = cameraBase.CameraIP;
cam.IsEnabled = cameraBase.IsEnabled; cam.IsEnabled = cameraBase.IsEnabled;
cam.ImageSaveDirectory = Path.Combine("D://Projects", cameraBase.CameraName); cam.ImageSaveDirectory = Path.Combine("D://Projects", cameraBase.CameraName);
Cameras.Add(cam); Cameras.Add(cam);
if(cameraBase.IsEnabled) if (cameraBase.IsEnabled)
{ {
cam.OnLog -= _visionEngine_OnLog; cam.OnLog -= _visionEngine_OnLog;
cam.OnLog += _visionEngine_OnLog; cam.OnLog += _visionEngine_OnLog;
@ -780,7 +784,7 @@ namespace DHSoftware
// //
_visionEngine = new SimboVisionDriver(); _visionEngine = new SimboVisionDriver();
_visionEngine.DetectionConfigs = DetectionConfigs; _visionEngine.DetectionConfigs = DetectionConfigs;
_visionEngine.LoggerHelper .LogPath = "D://PROJECTS//Logs//"; _visionEngine.LoggerHelper.LogPath = "D://PROJECTS//Logs//";
_visionEngine.LoggerHelper.LogPrefix = "Vision"; _visionEngine.LoggerHelper.LogPrefix = "Vision";
_visionEngine.OnLog += _visionEngine_OnLog; _visionEngine.OnLog += _visionEngine_OnLog;
//初始化模型 加载模型 //初始化模型 加载模型
@ -800,7 +804,8 @@ namespace DHSoftware
private void LogDisplay(LogMsg msg) private void LogDisplay(LogMsg msg)
{ {
frmLog?.LogDisplay(msg); //frmLog?.LogDisplay(msg);
frmLog?.AddLog(msg);
} }
public LoggerHelper LoggerHelper { get; set; } = new LoggerHelper(); public LoggerHelper LoggerHelper { get; set; } = new LoggerHelper();
public virtual void LogAsync(LogMsg msg) public virtual void LogAsync(LogMsg msg)
@ -903,7 +908,7 @@ namespace DHSoftware
//} //}
//lblOEE_Rate.Text = ProcessControl.OEE.ToString("f2") + " %"; //lblOEE_Rate.Text = ProcessControl.OEE.ToString("f2") + " %";
lblUPH.Text = UPH.ToString(); lblUPH.Text = UPM.ToString();
})); }));
} }
@ -1101,7 +1106,7 @@ namespace DHSoftware
} }
segmented1.SelectIndex = -1; segmented1.SelectIndex = -1;
} }
public string BatchNO { get; set; }
public bool CurrentMachine = false; public bool CurrentMachine = false;
public volatile int ProductNum_Total = 0; public volatile int ProductNum_Total = 0;
public volatile int ProductNum_OK = 0; public volatile int ProductNum_OK = 0;
@ -1114,7 +1119,12 @@ namespace DHSoftware
private Dictionary<string, HDevEngineTool> HalconToolDict = new Dictionary<string, HDevEngineTool>(); private Dictionary<string, HDevEngineTool> HalconToolDict = new Dictionary<string, HDevEngineTool>();
public List<RecongnitionLabel> RecongnitionLabelList { get; set; } = new List<RecongnitionLabel>(); public List<RecongnitionLabel> RecongnitionLabelList { get; set; } = new List<RecongnitionLabel>();
public DateTime ProcessstartTime; public DateTime ProcessstartTime;
private void PrepareBatchNO()
{
BatchNO = string.IsNullOrEmpty(BatchNO) ? SystemModel.CurrentScheme + "-" + DateTime.Now.ToString("yyyyMMddHHmmss") : BatchNO;
// DataSavePath = string.IsNullOrEmpty(DataSavePath) ? Path.Combine(X018PLCConfig.ImgDirectory, DateTime.Now.ToString("yyyyMMdd"), BatchNO) : DataSavePath;
}
private void HandleStartButton() private void HandleStartButton()
{ {
InitialCameraSumsView(); InitialCameraSumsView();
@ -1127,11 +1137,16 @@ namespace DHSoftware
private void StartProcess() private void StartProcess()
{ {
BatchNO = textBoxBatchNO.Text;
textBoxBatchNO.ReadOnly = true;
btnCreateBatchNO.Enabled = false;
PrepareBatchNO();//生成批次号
ProcessstartTime = DateTime.Now; ProcessstartTime = DateTime.Now;
lblStartTime.Text = ProcessstartTime.ToString("yyyy-MM-dd HH:mm:ss"); lblStartTime.Text = ProcessstartTime.ToString("yyyy-MM-dd HH:mm:ss");
//计数清零 //计数清零
PieceCount = 0; PieceCount = 0;
//CameraSummaries.Clear();
if (PLC?.Enable == true) if (PLC?.Enable == true)
{ {
@ -1379,17 +1394,33 @@ namespace DHSoftware
var tmpImgSet = camera.CopyImageSet(imageSet as MatSet); var tmpImgSet = camera.CopyImageSet(imageSet as MatSet);
//imageSet //imageSet
// using (Mat inferenceImage = localImageSet.Clone()) // 仅在此处克隆,确保推理过程中 Mat 有独立副本 // using (Mat inferenceImage = localImageSet.Clone()) // 仅在此处克隆,确保推理过程中 Mat 有独立副本
{
DetectStationResult temp1 = _visionEngine.RunInference(tmpImgSet, detectionId); DetectStationResult temp1 = _visionEngine.RunInference(tmpImgSet, detectionId);
resultStates.Add(temp1.ResultState); resultStates.Add(temp1.ResultState);
product.ResultCollection.Add(temp1); product.ResultCollection.Add(temp1);
if (temp1 != null)
{
UpdateResultTigger(dt, temp1.DetectName, (int)productNumber);
//if (tmpModuleData.CamIDs.Count == 1)
//{
// UpdateResultoverride(dt, temp1.DetectName, resultStates, totalTime, _cameraRelatedDetectionDict.Keys.Count);
//}
//else //合图的合成一列
//{
// UpdateResultoverride(dt, temp1.DetectName, resultStates, totalTime, _cameraRelatedDetectionDict.Keys.Count);
//}
if (product.ResultCollection.Count != 0)
UpdateResultoverride(dt, temp1.DetectName, resultStates, totalTime, _cameraRelatedDetectionDict.Keys.Count);
} }
} }
stopwatch.Stop(); stopwatch.Stop();
if (product.ResultCollection.Count != 0)
UpdateResultoverride(dt, camera, resultStates, totalTime, _cameraRelatedDetectionDict.Keys.Count);
product.InferenceOne(); product.InferenceOne();
@ -1505,14 +1536,49 @@ namespace DHSoftware
ProductNum_OK++; ProductNum_OK++;
} }
} }
public async Task UpdateResultoverride(DateTime dt, CameraBase objData, List<ResultState> resultStr, double total, int _cameraDictCount) public async Task UpdateResultTigger(DateTime dt, string objData, int _cameraDictCount)
{
CurrentState = RunState.Running;
// 根据相机名称找到对应的信息(假设有一个字典或其他集合保存相机相关信息)
var cameraName = objData; // 假设 CameraBase 有 Name 属性
if (string.IsNullOrEmpty(cameraName))
{
throw new ArgumentException("相机名称不能为空");
}
lock (_cameraSummaryLock)
{
// 查找或添加相机统计项
var summary = CameraSummaries.FirstOrDefault(c => c.CameraName == cameraName)
?? new CameraSummary { CameraName = cameraName };
if (!CameraSummaries.Contains(summary))
{
CameraSummaries.Add(summary);
}
summary.TiggerCount = _cameraDictCount;
}
await Task.Run(() =>
{
OnUpdateCamResult?.Invoke(dt, objData, "");
});
}
public async Task UpdateResultoverride(DateTime dt, string objData, List<ResultState> resultStr, double total, int _cameraDictCount)
{ {
// CurrentState = RunState.Running; // CurrentState = RunState.Running;
// 根据相机名称找到对应的信息(假设有一个字典或其他集合保存相机相关信息) // 根据相机名称找到对应的信息(假设有一个字典或其他集合保存相机相关信息)
var cameraName = objData?.CameraName; // 假设 CameraBase 有 Name 属性 var cameraName = objData; // 假设 CameraBase 有 Name 属性
if (string.IsNullOrEmpty(cameraName)) if (string.IsNullOrEmpty(cameraName))
{ {
throw new ArgumentException("相机名称不能为空"); throw new ArgumentException("相机名称不能为空");
@ -1612,6 +1678,9 @@ namespace DHSoftware
private void HandleStopButton() private void HandleStopButton()
{ {
textBoxBatchNO.ReadOnly = false;
btnCreateBatchNO.Enabled = true;
// Cameras.Clear(); // Cameras.Clear();
// Dectection.Clear(); // Dectection.Clear();
// Add the code for the "停止" button click here // Add the code for the "停止" button click here
@ -1669,18 +1738,9 @@ namespace DHSoftware
LoginWindow.Instance.Show(); LoginWindow.Instance.Show();
} }
private void splitter1_SplitterMoved(object sender, SplitterEventArgs e) private void btnCreateBatchNO_Click(object sender, EventArgs e)
{ {
} textBoxBatchNO.Text = SystemModel.CurrentScheme + "-" + DateTime.Now.ToString("yyyyMMddHHmmss");
private void richTextBox1_TextChanged(object sender, EventArgs e)
{
}
private void splitContainer2_Panel1_Paint(object sender, PaintEventArgs e)
{
} }
} }
} }

View File

@ -117,34 +117,34 @@
<resheader name="writer"> <resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader> </resheader>
<data name="segmentedItem1.IconActiveSvg" xml:space="preserve"> <data name="segmentedItem6.IconActiveSvg" xml:space="preserve">
<value>&lt;svg viewBox="0 0 1024 1024" xmlns="http://www.w3.org/2000/svg" width="200" height="200"&gt;&lt;path d="M731.818667 500.280889L386.844444 239.729778a14.677333 14.677333 0 0 0-23.495111 11.719111v521.159111a14.677333 14.677333 0 0 0 23.495111 11.662222l344.860445-260.608a14.677333 14.677333 0 0 0 0.113778-23.381333z" fill="#FFFFFF"/&gt;&lt;path d="M512 1024a512 512 0 1 1 512-512 512.568889 512.568889 0 0 1-512 512z m0-946.915556A434.915556 434.915556 0 1 0 946.915556 512 435.427556 435.427556 0 0 0 512 77.084444z" fill="#FFFFFF"/&gt;&lt;/svg&gt;</value> <value>&lt;svg viewBox="0 0 1024 1024" xmlns="http://www.w3.org/2000/svg" width="200" height="200"&gt;&lt;path d="M731.818667 500.280889L386.844444 239.729778a14.677333 14.677333 0 0 0-23.495111 11.719111v521.159111a14.677333 14.677333 0 0 0 23.495111 11.662222l344.860445-260.608a14.677333 14.677333 0 0 0 0.113778-23.381333z" fill="#FFFFFF"/&gt;&lt;path d="M512 1024a512 512 0 1 1 512-512 512.568889 512.568889 0 0 1-512 512z m0-946.915556A434.915556 434.915556 0 1 0 946.915556 512 435.427556 435.427556 0 0 0 512 77.084444z" fill="#FFFFFF"/&gt;&lt;/svg&gt;</value>
</data> </data>
<data name="segmentedItem1.IconSvg" xml:space="preserve"> <data name="segmentedItem6.IconSvg" xml:space="preserve">
<value>&lt;svg viewBox="0 0 1024 1024" xmlns="http://www.w3.org/2000/svg" width="200" height="200"&gt;&lt;path d="M731.818667 500.280889L386.844444 239.729778a14.677333 14.677333 0 0 0-23.495111 11.719111v521.159111a14.677333 14.677333 0 0 0 23.495111 11.662222l344.860445-260.608a14.677333 14.677333 0 0 0 0.113778-23.381333z" fill="#FFFFFF"/&gt;&lt;path d="M512 1024a512 512 0 1 1 512-512 512.568889 512.568889 0 0 1-512 512z m0-946.915556A434.915556 434.915556 0 1 0 946.915556 512 435.427556 435.427556 0 0 0 512 77.084444z" fill="#FFFFFF"/&gt;&lt;/svg&gt;</value> <value>&lt;svg viewBox="0 0 1024 1024" xmlns="http://www.w3.org/2000/svg" width="200" height="200"&gt;&lt;path d="M731.818667 500.280889L386.844444 239.729778a14.677333 14.677333 0 0 0-23.495111 11.719111v521.159111a14.677333 14.677333 0 0 0 23.495111 11.662222l344.860445-260.608a14.677333 14.677333 0 0 0 0.113778-23.381333z" fill="#FFFFFF"/&gt;&lt;path d="M512 1024a512 512 0 1 1 512-512 512.568889 512.568889 0 0 1-512 512z m0-946.915556A434.915556 434.915556 0 1 0 946.915556 512 435.427556 435.427556 0 0 0 512 77.084444z" fill="#FFFFFF"/&gt;&lt;/svg&gt;</value>
</data> </data>
<data name="segmentedItem2.IconActiveSvg" xml:space="preserve"> <data name="segmentedItem7.IconActiveSvg" xml:space="preserve">
<value>&lt;svg viewBox="0 0 1024 1024" xmlns="http://www.w3.org/2000/svg" width="200" height="200"&gt;&lt;path d="M365.014704 657.815846H657.084939V365.74561H365.014704V657.815846zm584.140471-146.035118c0-240.906781-197.125482-438.105353-438.105353-438.105353-240.979872 0-438.105353 197.198572-438.105354 438.105353 0 240.979872 197.125482 438.178444 438.105354 438.178444 240.979872 0 438.105353-197.198572 438.105353-438.178444zM511.634547 0.730906c281.399001 0 511.634547 230.235546 511.634547 511.634547s-230.235546 511.634547-511.634547 511.634547-511.634547-230.235546-511.634547-511.634547 230.235546-511.634547 511.634547-511.634547z" fill="#FFFFFF"/&gt;&lt;/svg&gt;</value> <value>&lt;svg viewBox="0 0 1024 1024" xmlns="http://www.w3.org/2000/svg" width="200" height="200"&gt;&lt;path d="M365.014704 657.815846H657.084939V365.74561H365.014704V657.815846zm584.140471-146.035118c0-240.906781-197.125482-438.105353-438.105353-438.105353-240.979872 0-438.105353 197.198572-438.105354 438.105353 0 240.979872 197.125482 438.178444 438.105354 438.178444 240.979872 0 438.105353-197.198572 438.105353-438.178444zM511.634547 0.730906c281.399001 0 511.634547 230.235546 511.634547 511.634547s-230.235546 511.634547-511.634547 511.634547-511.634547-230.235546-511.634547-511.634547 230.235546-511.634547 511.634547-511.634547z" fill="#FFFFFF"/&gt;&lt;/svg&gt;</value>
</data> </data>
<data name="segmentedItem2.IconSvg" xml:space="preserve"> <data name="segmentedItem7.IconSvg" xml:space="preserve">
<value>&lt;svg viewBox="0 0 1024 1024" xmlns="http://www.w3.org/2000/svg" width="200" height="200"&gt;&lt;path d="M365.014704 657.815846H657.084939V365.74561H365.014704V657.815846zm584.140471-146.035118c0-240.906781-197.125482-438.105353-438.105353-438.105353-240.979872 0-438.105353 197.198572-438.105354 438.105353 0 240.979872 197.125482 438.178444 438.105354 438.178444 240.979872 0 438.105353-197.198572 438.105353-438.178444zM511.634547 0.730906c281.399001 0 511.634547 230.235546 511.634547 511.634547s-230.235546 511.634547-511.634547 511.634547-511.634547-230.235546-511.634547-511.634547 230.235546-511.634547 511.634547-511.634547z" fill="#FFFFFF"/&gt;&lt;/svg&gt;</value> <value>&lt;svg viewBox="0 0 1024 1024" xmlns="http://www.w3.org/2000/svg" width="200" height="200"&gt;&lt;path d="M365.014704 657.815846H657.084939V365.74561H365.014704V657.815846zm584.140471-146.035118c0-240.906781-197.125482-438.105353-438.105353-438.105353-240.979872 0-438.105353 197.198572-438.105354 438.105353 0 240.979872 197.125482 438.178444 438.105354 438.178444 240.979872 0 438.105353-197.198572 438.105353-438.178444zM511.634547 0.730906c281.399001 0 511.634547 230.235546 511.634547 511.634547s-230.235546 511.634547-511.634547 511.634547-511.634547-230.235546-511.634547-511.634547 230.235546-511.634547 511.634547-511.634547z" fill="#FFFFFF"/&gt;&lt;/svg&gt;</value>
</data> </data>
<data name="segmentedItem3.IconActiveSvg" xml:space="preserve"> <data name="segmentedItem8.IconActiveSvg" xml:space="preserve">
<value>&lt;svg viewBox="0 0 1027 1024" xmlns="http://www.w3.org/2000/svg" width="200" height="200"&gt;&lt;path d="M512 0C229.376 0 0 229.376 0 512s229.376 512 512 512 512-229.376 512-512S794.624 0 512 0zm0 963.584c-249.344 0-451.584-202.24-451.584-451.584S262.656 60.416 512 60.416s451.584 202.24 451.584 451.584-202.24 451.584-451.584 451.584z" fill="#FFFFFF"/&gt;&lt;path d="M527.36 351.744V292.864L410.624 380.416 527.36 468.48V410.624c72.192 8.192 124.416 73.216 116.224 145.408-8.192 72.192-73.216 124.416-145.408 116.224-66.56-7.168-117.248-64-117.248-131.072-0.512-5.12-0.512-9.728 0-14.848H323.584c-0.512 5.12-0.512 9.728 0 14.848 0 104.96 85.504 189.952 190.464 189.952s189.952-85.504 189.952-190.464c-0.512-99.328-77.312-181.76-176.64-188.928z" fill="#FFFFFF"/&gt;&lt;/svg&gt;</value> <value>&lt;svg viewBox="0 0 1027 1024" xmlns="http://www.w3.org/2000/svg" width="200" height="200"&gt;&lt;path d="M512 0C229.376 0 0 229.376 0 512s229.376 512 512 512 512-229.376 512-512S794.624 0 512 0zm0 963.584c-249.344 0-451.584-202.24-451.584-451.584S262.656 60.416 512 60.416s451.584 202.24 451.584 451.584-202.24 451.584-451.584 451.584z" fill="#FFFFFF"/&gt;&lt;path d="M527.36 351.744V292.864L410.624 380.416 527.36 468.48V410.624c72.192 8.192 124.416 73.216 116.224 145.408-8.192 72.192-73.216 124.416-145.408 116.224-66.56-7.168-117.248-64-117.248-131.072-0.512-5.12-0.512-9.728 0-14.848H323.584c-0.512 5.12-0.512 9.728 0 14.848 0 104.96 85.504 189.952 190.464 189.952s189.952-85.504 189.952-190.464c-0.512-99.328-77.312-181.76-176.64-188.928z" fill="#FFFFFF"/&gt;&lt;/svg&gt;</value>
</data> </data>
<data name="segmentedItem3.IconSvg" xml:space="preserve"> <data name="segmentedItem8.IconSvg" xml:space="preserve">
<value>&lt;svg viewBox="0 0 1027 1024" xmlns="http://www.w3.org/2000/svg" width="200" height="200"&gt;&lt;path d="M512 0C229.376 0 0 229.376 0 512s229.376 512 512 512 512-229.376 512-512S794.624 0 512 0zm0 963.584c-249.344 0-451.584-202.24-451.584-451.584S262.656 60.416 512 60.416s451.584 202.24 451.584 451.584-202.24 451.584-451.584 451.584z" fill="#FFFFFF"/&gt;&lt;path d="M527.36 351.744V292.864L410.624 380.416 527.36 468.48V410.624c72.192 8.192 124.416 73.216 116.224 145.408-8.192 72.192-73.216 124.416-145.408 116.224-66.56-7.168-117.248-64-117.248-131.072-0.512-5.12-0.512-9.728 0-14.848H323.584c-0.512 5.12-0.512 9.728 0 14.848 0 104.96 85.504 189.952 190.464 189.952s189.952-85.504 189.952-190.464c-0.512-99.328-77.312-181.76-176.64-188.928z" fill="#FFFFFF"/&gt;&lt;/svg&gt;</value> <value>&lt;svg viewBox="0 0 1027 1024" xmlns="http://www.w3.org/2000/svg" width="200" height="200"&gt;&lt;path d="M512 0C229.376 0 0 229.376 0 512s229.376 512 512 512 512-229.376 512-512S794.624 0 512 0zm0 963.584c-249.344 0-451.584-202.24-451.584-451.584S262.656 60.416 512 60.416s451.584 202.24 451.584 451.584-202.24 451.584-451.584 451.584z" fill="#FFFFFF"/&gt;&lt;path d="M527.36 351.744V292.864L410.624 380.416 527.36 468.48V410.624c72.192 8.192 124.416 73.216 116.224 145.408-8.192 72.192-73.216 124.416-145.408 116.224-66.56-7.168-117.248-64-117.248-131.072-0.512-5.12-0.512-9.728 0-14.848H323.584c-0.512 5.12-0.512 9.728 0 14.848 0 104.96 85.504 189.952 190.464 189.952s189.952-85.504 189.952-190.464c-0.512-99.328-77.312-181.76-176.64-188.928z" fill="#FFFFFF"/&gt;&lt;/svg&gt;</value>
</data> </data>
<data name="segmentedItem4.IconActiveSvg" xml:space="preserve"> <data name="segmentedItem9.IconActiveSvg" xml:space="preserve">
<value>&lt;svg viewBox="0 0 1024 1024" xmlns="http://www.w3.org/2000/svg" width="200" height="200"&gt;&lt;path d="M512 0C229.376 0 0 229.376 0 512s229.376 512 512 512 512-229.376 512-512S794.624 0 512 0zm0 963.584c-249.344 0-451.584-202.24-451.584-451.584S262.656 60.416 512 60.416s451.584 202.24 451.584 451.584-202.24 451.584-451.584 451.584z" fill="#FFFFFF"/&gt;&lt;path transform="scale(0.8) translate(128,128)" d="M960.853333 903.816533a463.633067 463.633067 0 0 0-11.264-39.185066c-1.536-4.539733-3.413333-8.942933-5.051733-13.448534a484.078933 484.078933 0 0 0-9.557333-24.4736c-2.2528-5.188267-4.881067-10.274133-7.338667-15.394133-3.413333-7.099733-6.8608-14.165333-10.6496-21.0944-2.901333-5.3248-6.075733-10.513067-9.181867-15.701333-2.423467-4.061867-4.573867-8.226133-7.133866-12.219734-1.604267-2.4576-3.413333-4.778667-5.0176-7.202133-1.501867-2.218667-2.730667-4.608-4.266667-6.792533-0.4096-0.6144-1.058133-0.887467-1.501867-1.4336a461.482667 461.482667 0 0 0-90.385066-96.768c-13.5168-10.786133-27.7504-20.48-42.257067-29.5936-0.477867-0.341333-0.7168-0.8192-1.194667-1.1264-3.6864-2.286933-7.509333-4.3008-11.264-6.485334-4.266667-2.491733-8.4992-5.051733-12.868266-7.441066-6.826667-3.6864-13.789867-7.099733-20.753067-10.478934-3.618133-1.7408-7.202133-3.618133-10.8544-5.290666a449.194667 449.194667 0 0 0-31.607467-12.731734c-0.7168-0.273067-1.365333-0.6144-2.082133-0.8192-3.140267-1.1264-6.417067-1.911467-9.557333-2.935466-4.164267-1.399467-8.328533-2.833067-12.561067-4.096a259.9936 259.9936 0 0 0 129.194667-225.450667 260.061867 260.061867 0 0 0-76.629334-185.002667 259.9936 259.9936 0 0 0-185.002666-76.629333H512h-0.034133a259.857067 259.857067 0 0 0-185.002667 76.629333 259.925333 259.925333 0 0 0-76.629333 185.002667 259.584 259.584 0 0 0 76.629333 185.002667c15.906133 15.940267 33.655467 29.2864 52.565333 40.448-4.266667 1.262933-8.430933 2.730667-12.663466 4.096-3.140267 1.058133-6.3488 1.8432-9.489067 2.935466-0.7168 0.238933-1.365333 0.580267-2.048 0.8192-10.683733 3.822933-21.265067 8.0896-31.675733 12.765867-3.584 1.604267-7.0656 3.4816-10.615467 5.154133-7.099733 3.413333-14.165333 6.826667-21.0944 10.615467-4.266667 2.321067-8.3968 4.8128-12.561067 7.2704-3.822933 2.218667-7.748267 4.266667-11.502933 6.621867-0.512 0.3072-0.750933 0.8192-1.2288 1.160533-14.506667 9.147733-28.706133 18.807467-42.222933 29.559467a459.6736 459.6736 0 0 0-90.385067 96.768c-0.443733 0.546133-1.092267 0.8192-1.501867 1.4336-1.536 2.184533-2.7648 4.573867-4.266666 6.792533-1.604267 2.423467-3.447467 4.744533-5.0176 7.202133-2.56 3.9936-4.7104 8.157867-7.133867 12.219734-3.106133 5.188267-6.280533 10.376533-9.181867 15.701333-3.7888 6.929067-7.202133 13.994667-10.6496 21.0944-2.4576 5.12-5.051733 10.205867-7.338666 15.394133-3.515733 8.021333-6.519467 16.247467-9.557334 24.4736-1.672533 4.5056-3.549867 8.9088-5.051733 13.448534-4.3008 12.868267-8.0896 25.941333-11.264 39.185066-3.072 12.970667 2.594133 25.770667 13.073067 32.802134a31.3344 31.3344 0 0 0 9.966933 4.608 30.9248 30.9248 0 0 0 34.030933-15.2576 30.446933 30.446933 0 0 0 3.345067-7.7824c2.833067-11.844267 6.178133-23.483733 10.0352-34.9184 0.6144-1.8432 1.399467-3.549867 2.013867-5.358934 3.447467-9.762133 7.133867-19.456 11.332266-28.945066 0.512-1.160533 1.1264-2.2528 1.6384-3.447467 4.7104-10.308267 9.728-20.48 15.291734-30.344533l0.068266-0.1024a402.773333 402.773333 0 0 1 19.694934-31.4368l0.136533-0.375467a397.4144 397.4144 0 0 1 116.599467-111.2064c0.136533-0.1024 0.3072-0.068267 0.443733-0.170667a397.824 397.824 0 0 1 94.993067-42.973866c2.7648-0.8192 5.495467-1.7408 8.2944-2.491734 5.7344-1.604267 11.5712-3.003733 17.373866-4.334933a367.8208 367.8208 0 0 1 47.342934-7.953067c3.8912-0.443733 7.7824-0.9216 11.6736-1.2288 10.410667-0.785067 20.8896-1.3312 31.505066-1.3312s21.060267 0.546133 31.505067 1.3312c3.8912 0.3072 7.816533 0.785067 11.707733 1.2288a361.3696 361.3696 0 0 1 47.240534 7.953067c5.870933 1.3312 11.707733 2.730667 17.5104 4.334933 2.696533 0.750933 5.358933 1.6384 8.021333 2.4576 33.348267 10.103467 65.365333 24.405333 95.197867 43.008 0.136533 0.1024 0.3072 0.068267 0.443733 0.170667a396.151467 396.151467 0 0 1 116.599467 111.2064c0.1024 0.136533 0.1024 0.273067 0.170666 0.375467 13.687467 19.7632 25.3952 40.5504 35.191467 62.1568l1.467733 3.037866c4.3008 9.659733 8.055467 19.592533 11.605334 29.5936 0.546133 1.604267 1.2288 3.106133 1.774933 4.7104 3.822933 11.4688 7.236267 23.176533 10.0352 35.0208a31.061333 31.061333 0 0 0 60.450133-14.336zm-249.275733-560.2304A199.850667 199.850667 0 0 1 512 543.197867a199.850667 199.850667 0 0 1-199.5776-199.611734A199.816533 199.816533 0 0 1 512 144.008533a199.816533 199.816533 0 0 1 199.5776 199.5776z" fill="#FFFFFF"/&gt;&lt;/svg&gt;</value> <value>&lt;svg viewBox="0 0 1024 1024" xmlns="http://www.w3.org/2000/svg" width="200" height="200"&gt;&lt;path d="M512 0C229.376 0 0 229.376 0 512s229.376 512 512 512 512-229.376 512-512S794.624 0 512 0zm0 963.584c-249.344 0-451.584-202.24-451.584-451.584S262.656 60.416 512 60.416s451.584 202.24 451.584 451.584-202.24 451.584-451.584 451.584z" fill="#FFFFFF"/&gt;&lt;path transform="scale(0.8) translate(128,128)" d="M960.853333 903.816533a463.633067 463.633067 0 0 0-11.264-39.185066c-1.536-4.539733-3.413333-8.942933-5.051733-13.448534a484.078933 484.078933 0 0 0-9.557333-24.4736c-2.2528-5.188267-4.881067-10.274133-7.338667-15.394133-3.413333-7.099733-6.8608-14.165333-10.6496-21.0944-2.901333-5.3248-6.075733-10.513067-9.181867-15.701333-2.423467-4.061867-4.573867-8.226133-7.133866-12.219734-1.604267-2.4576-3.413333-4.778667-5.0176-7.202133-1.501867-2.218667-2.730667-4.608-4.266667-6.792533-0.4096-0.6144-1.058133-0.887467-1.501867-1.4336a461.482667 461.482667 0 0 0-90.385066-96.768c-13.5168-10.786133-27.7504-20.48-42.257067-29.5936-0.477867-0.341333-0.7168-0.8192-1.194667-1.1264-3.6864-2.286933-7.509333-4.3008-11.264-6.485334-4.266667-2.491733-8.4992-5.051733-12.868266-7.441066-6.826667-3.6864-13.789867-7.099733-20.753067-10.478934-3.618133-1.7408-7.202133-3.618133-10.8544-5.290666a449.194667 449.194667 0 0 0-31.607467-12.731734c-0.7168-0.273067-1.365333-0.6144-2.082133-0.8192-3.140267-1.1264-6.417067-1.911467-9.557333-2.935466-4.164267-1.399467-8.328533-2.833067-12.561067-4.096a259.9936 259.9936 0 0 0 129.194667-225.450667 260.061867 260.061867 0 0 0-76.629334-185.002667 259.9936 259.9936 0 0 0-185.002666-76.629333H512h-0.034133a259.857067 259.857067 0 0 0-185.002667 76.629333 259.925333 259.925333 0 0 0-76.629333 185.002667 259.584 259.584 0 0 0 76.629333 185.002667c15.906133 15.940267 33.655467 29.2864 52.565333 40.448-4.266667 1.262933-8.430933 2.730667-12.663466 4.096-3.140267 1.058133-6.3488 1.8432-9.489067 2.935466-0.7168 0.238933-1.365333 0.580267-2.048 0.8192-10.683733 3.822933-21.265067 8.0896-31.675733 12.765867-3.584 1.604267-7.0656 3.4816-10.615467 5.154133-7.099733 3.413333-14.165333 6.826667-21.0944 10.615467-4.266667 2.321067-8.3968 4.8128-12.561067 7.2704-3.822933 2.218667-7.748267 4.266667-11.502933 6.621867-0.512 0.3072-0.750933 0.8192-1.2288 1.160533-14.506667 9.147733-28.706133 18.807467-42.222933 29.559467a459.6736 459.6736 0 0 0-90.385067 96.768c-0.443733 0.546133-1.092267 0.8192-1.501867 1.4336-1.536 2.184533-2.7648 4.573867-4.266666 6.792533-1.604267 2.423467-3.447467 4.744533-5.0176 7.202133-2.56 3.9936-4.7104 8.157867-7.133867 12.219734-3.106133 5.188267-6.280533 10.376533-9.181867 15.701333-3.7888 6.929067-7.202133 13.994667-10.6496 21.0944-2.4576 5.12-5.051733 10.205867-7.338666 15.394133-3.515733 8.021333-6.519467 16.247467-9.557334 24.4736-1.672533 4.5056-3.549867 8.9088-5.051733 13.448534-4.3008 12.868267-8.0896 25.941333-11.264 39.185066-3.072 12.970667 2.594133 25.770667 13.073067 32.802134a31.3344 31.3344 0 0 0 9.966933 4.608 30.9248 30.9248 0 0 0 34.030933-15.2576 30.446933 30.446933 0 0 0 3.345067-7.7824c2.833067-11.844267 6.178133-23.483733 10.0352-34.9184 0.6144-1.8432 1.399467-3.549867 2.013867-5.358934 3.447467-9.762133 7.133867-19.456 11.332266-28.945066 0.512-1.160533 1.1264-2.2528 1.6384-3.447467 4.7104-10.308267 9.728-20.48 15.291734-30.344533l0.068266-0.1024a402.773333 402.773333 0 0 1 19.694934-31.4368l0.136533-0.375467a397.4144 397.4144 0 0 1 116.599467-111.2064c0.136533-0.1024 0.3072-0.068267 0.443733-0.170667a397.824 397.824 0 0 1 94.993067-42.973866c2.7648-0.8192 5.495467-1.7408 8.2944-2.491734 5.7344-1.604267 11.5712-3.003733 17.373866-4.334933a367.8208 367.8208 0 0 1 47.342934-7.953067c3.8912-0.443733 7.7824-0.9216 11.6736-1.2288 10.410667-0.785067 20.8896-1.3312 31.505066-1.3312s21.060267 0.546133 31.505067 1.3312c3.8912 0.3072 7.816533 0.785067 11.707733 1.2288a361.3696 361.3696 0 0 1 47.240534 7.953067c5.870933 1.3312 11.707733 2.730667 17.5104 4.334933 2.696533 0.750933 5.358933 1.6384 8.021333 2.4576 33.348267 10.103467 65.365333 24.405333 95.197867 43.008 0.136533 0.1024 0.3072 0.068267 0.443733 0.170667a396.151467 396.151467 0 0 1 116.599467 111.2064c0.1024 0.136533 0.1024 0.273067 0.170666 0.375467 13.687467 19.7632 25.3952 40.5504 35.191467 62.1568l1.467733 3.037866c4.3008 9.659733 8.055467 19.592533 11.605334 29.5936 0.546133 1.604267 1.2288 3.106133 1.774933 4.7104 3.822933 11.4688 7.236267 23.176533 10.0352 35.0208a31.061333 31.061333 0 0 0 60.450133-14.336zm-249.275733-560.2304A199.850667 199.850667 0 0 1 512 543.197867a199.850667 199.850667 0 0 1-199.5776-199.611734A199.816533 199.816533 0 0 1 512 144.008533a199.816533 199.816533 0 0 1 199.5776 199.5776z" fill="#FFFFFF"/&gt;&lt;/svg&gt;</value>
</data> </data>
<data name="segmentedItem4.IconSvg" xml:space="preserve"> <data name="segmentedItem9.IconSvg" xml:space="preserve">
<value>&lt;svg viewBox="0 0 1024 1024" xmlns="http://www.w3.org/2000/svg" width="200" height="200"&gt;&lt;path d="M512 0C229.376 0 0 229.376 0 512s229.376 512 512 512 512-229.376 512-512S794.624 0 512 0zm0 963.584c-249.344 0-451.584-202.24-451.584-451.584S262.656 60.416 512 60.416s451.584 202.24 451.584 451.584-202.24 451.584-451.584 451.584z" fill="#FFFFFF"/&gt;&lt;path transform="scale(0.8) translate(128,128)" d="M960.853333 903.816533a463.633067 463.633067 0 0 0-11.264-39.185066c-1.536-4.539733-3.413333-8.942933-5.051733-13.448534a484.078933 484.078933 0 0 0-9.557333-24.4736c-2.2528-5.188267-4.881067-10.274133-7.338667-15.394133-3.413333-7.099733-6.8608-14.165333-10.6496-21.0944-2.901333-5.3248-6.075733-10.513067-9.181867-15.701333-2.423467-4.061867-4.573867-8.226133-7.133866-12.219734-1.604267-2.4576-3.413333-4.778667-5.0176-7.202133-1.501867-2.218667-2.730667-4.608-4.266667-6.792533-0.4096-0.6144-1.058133-0.887467-1.501867-1.4336a461.482667 461.482667 0 0 0-90.385066-96.768c-13.5168-10.786133-27.7504-20.48-42.257067-29.5936-0.477867-0.341333-0.7168-0.8192-1.194667-1.1264-3.6864-2.286933-7.509333-4.3008-11.264-6.485334-4.266667-2.491733-8.4992-5.051733-12.868266-7.441066-6.826667-3.6864-13.789867-7.099733-20.753067-10.478934-3.618133-1.7408-7.202133-3.618133-10.8544-5.290666a449.194667 449.194667 0 0 0-31.607467-12.731734c-0.7168-0.273067-1.365333-0.6144-2.082133-0.8192-3.140267-1.1264-6.417067-1.911467-9.557333-2.935466-4.164267-1.399467-8.328533-2.833067-12.561067-4.096a259.9936 259.9936 0 0 0 129.194667-225.450667 260.061867 260.061867 0 0 0-76.629334-185.002667 259.9936 259.9936 0 0 0-185.002666-76.629333H512h-0.034133a259.857067 259.857067 0 0 0-185.002667 76.629333 259.925333 259.925333 0 0 0-76.629333 185.002667 259.584 259.584 0 0 0 76.629333 185.002667c15.906133 15.940267 33.655467 29.2864 52.565333 40.448-4.266667 1.262933-8.430933 2.730667-12.663466 4.096-3.140267 1.058133-6.3488 1.8432-9.489067 2.935466-0.7168 0.238933-1.365333 0.580267-2.048 0.8192-10.683733 3.822933-21.265067 8.0896-31.675733 12.765867-3.584 1.604267-7.0656 3.4816-10.615467 5.154133-7.099733 3.413333-14.165333 6.826667-21.0944 10.615467-4.266667 2.321067-8.3968 4.8128-12.561067 7.2704-3.822933 2.218667-7.748267 4.266667-11.502933 6.621867-0.512 0.3072-0.750933 0.8192-1.2288 1.160533-14.506667 9.147733-28.706133 18.807467-42.222933 29.559467a459.6736 459.6736 0 0 0-90.385067 96.768c-0.443733 0.546133-1.092267 0.8192-1.501867 1.4336-1.536 2.184533-2.7648 4.573867-4.266666 6.792533-1.604267 2.423467-3.447467 4.744533-5.0176 7.202133-2.56 3.9936-4.7104 8.157867-7.133867 12.219734-3.106133 5.188267-6.280533 10.376533-9.181867 15.701333-3.7888 6.929067-7.202133 13.994667-10.6496 21.0944-2.4576 5.12-5.051733 10.205867-7.338666 15.394133-3.515733 8.021333-6.519467 16.247467-9.557334 24.4736-1.672533 4.5056-3.549867 8.9088-5.051733 13.448534-4.3008 12.868267-8.0896 25.941333-11.264 39.185066-3.072 12.970667 2.594133 25.770667 13.073067 32.802134a31.3344 31.3344 0 0 0 9.966933 4.608 30.9248 30.9248 0 0 0 34.030933-15.2576 30.446933 30.446933 0 0 0 3.345067-7.7824c2.833067-11.844267 6.178133-23.483733 10.0352-34.9184 0.6144-1.8432 1.399467-3.549867 2.013867-5.358934 3.447467-9.762133 7.133867-19.456 11.332266-28.945066 0.512-1.160533 1.1264-2.2528 1.6384-3.447467 4.7104-10.308267 9.728-20.48 15.291734-30.344533l0.068266-0.1024a402.773333 402.773333 0 0 1 19.694934-31.4368l0.136533-0.375467a397.4144 397.4144 0 0 1 116.599467-111.2064c0.136533-0.1024 0.3072-0.068267 0.443733-0.170667a397.824 397.824 0 0 1 94.993067-42.973866c2.7648-0.8192 5.495467-1.7408 8.2944-2.491734 5.7344-1.604267 11.5712-3.003733 17.373866-4.334933a367.8208 367.8208 0 0 1 47.342934-7.953067c3.8912-0.443733 7.7824-0.9216 11.6736-1.2288 10.410667-0.785067 20.8896-1.3312 31.505066-1.3312s21.060267 0.546133 31.505067 1.3312c3.8912 0.3072 7.816533 0.785067 11.707733 1.2288a361.3696 361.3696 0 0 1 47.240534 7.953067c5.870933 1.3312 11.707733 2.730667 17.5104 4.334933 2.696533 0.750933 5.358933 1.6384 8.021333 2.4576 33.348267 10.103467 65.365333 24.405333 95.197867 43.008 0.136533 0.1024 0.3072 0.068267 0.443733 0.170667a396.151467 396.151467 0 0 1 116.599467 111.2064c0.1024 0.136533 0.1024 0.273067 0.170666 0.375467 13.687467 19.7632 25.3952 40.5504 35.191467 62.1568l1.467733 3.037866c4.3008 9.659733 8.055467 19.592533 11.605334 29.5936 0.546133 1.604267 1.2288 3.106133 1.774933 4.7104 3.822933 11.4688 7.236267 23.176533 10.0352 35.0208a31.061333 31.061333 0 0 0 60.450133-14.336zm-249.275733-560.2304A199.850667 199.850667 0 0 1 512 543.197867a199.850667 199.850667 0 0 1-199.5776-199.611734A199.816533 199.816533 0 0 1 512 144.008533a199.816533 199.816533 0 0 1 199.5776 199.5776z" fill="#FFFFFF"/&gt;&lt;/svg&gt;</value> <value>&lt;svg viewBox="0 0 1024 1024" xmlns="http://www.w3.org/2000/svg" width="200" height="200"&gt;&lt;path d="M512 0C229.376 0 0 229.376 0 512s229.376 512 512 512 512-229.376 512-512S794.624 0 512 0zm0 963.584c-249.344 0-451.584-202.24-451.584-451.584S262.656 60.416 512 60.416s451.584 202.24 451.584 451.584-202.24 451.584-451.584 451.584z" fill="#FFFFFF"/&gt;&lt;path transform="scale(0.8) translate(128,128)" d="M960.853333 903.816533a463.633067 463.633067 0 0 0-11.264-39.185066c-1.536-4.539733-3.413333-8.942933-5.051733-13.448534a484.078933 484.078933 0 0 0-9.557333-24.4736c-2.2528-5.188267-4.881067-10.274133-7.338667-15.394133-3.413333-7.099733-6.8608-14.165333-10.6496-21.0944-2.901333-5.3248-6.075733-10.513067-9.181867-15.701333-2.423467-4.061867-4.573867-8.226133-7.133866-12.219734-1.604267-2.4576-3.413333-4.778667-5.0176-7.202133-1.501867-2.218667-2.730667-4.608-4.266667-6.792533-0.4096-0.6144-1.058133-0.887467-1.501867-1.4336a461.482667 461.482667 0 0 0-90.385066-96.768c-13.5168-10.786133-27.7504-20.48-42.257067-29.5936-0.477867-0.341333-0.7168-0.8192-1.194667-1.1264-3.6864-2.286933-7.509333-4.3008-11.264-6.485334-4.266667-2.491733-8.4992-5.051733-12.868266-7.441066-6.826667-3.6864-13.789867-7.099733-20.753067-10.478934-3.618133-1.7408-7.202133-3.618133-10.8544-5.290666a449.194667 449.194667 0 0 0-31.607467-12.731734c-0.7168-0.273067-1.365333-0.6144-2.082133-0.8192-3.140267-1.1264-6.417067-1.911467-9.557333-2.935466-4.164267-1.399467-8.328533-2.833067-12.561067-4.096a259.9936 259.9936 0 0 0 129.194667-225.450667 260.061867 260.061867 0 0 0-76.629334-185.002667 259.9936 259.9936 0 0 0-185.002666-76.629333H512h-0.034133a259.857067 259.857067 0 0 0-185.002667 76.629333 259.925333 259.925333 0 0 0-76.629333 185.002667 259.584 259.584 0 0 0 76.629333 185.002667c15.906133 15.940267 33.655467 29.2864 52.565333 40.448-4.266667 1.262933-8.430933 2.730667-12.663466 4.096-3.140267 1.058133-6.3488 1.8432-9.489067 2.935466-0.7168 0.238933-1.365333 0.580267-2.048 0.8192-10.683733 3.822933-21.265067 8.0896-31.675733 12.765867-3.584 1.604267-7.0656 3.4816-10.615467 5.154133-7.099733 3.413333-14.165333 6.826667-21.0944 10.615467-4.266667 2.321067-8.3968 4.8128-12.561067 7.2704-3.822933 2.218667-7.748267 4.266667-11.502933 6.621867-0.512 0.3072-0.750933 0.8192-1.2288 1.160533-14.506667 9.147733-28.706133 18.807467-42.222933 29.559467a459.6736 459.6736 0 0 0-90.385067 96.768c-0.443733 0.546133-1.092267 0.8192-1.501867 1.4336-1.536 2.184533-2.7648 4.573867-4.266666 6.792533-1.604267 2.423467-3.447467 4.744533-5.0176 7.202133-2.56 3.9936-4.7104 8.157867-7.133867 12.219734-3.106133 5.188267-6.280533 10.376533-9.181867 15.701333-3.7888 6.929067-7.202133 13.994667-10.6496 21.0944-2.4576 5.12-5.051733 10.205867-7.338666 15.394133-3.515733 8.021333-6.519467 16.247467-9.557334 24.4736-1.672533 4.5056-3.549867 8.9088-5.051733 13.448534-4.3008 12.868267-8.0896 25.941333-11.264 39.185066-3.072 12.970667 2.594133 25.770667 13.073067 32.802134a31.3344 31.3344 0 0 0 9.966933 4.608 30.9248 30.9248 0 0 0 34.030933-15.2576 30.446933 30.446933 0 0 0 3.345067-7.7824c2.833067-11.844267 6.178133-23.483733 10.0352-34.9184 0.6144-1.8432 1.399467-3.549867 2.013867-5.358934 3.447467-9.762133 7.133867-19.456 11.332266-28.945066 0.512-1.160533 1.1264-2.2528 1.6384-3.447467 4.7104-10.308267 9.728-20.48 15.291734-30.344533l0.068266-0.1024a402.773333 402.773333 0 0 1 19.694934-31.4368l0.136533-0.375467a397.4144 397.4144 0 0 1 116.599467-111.2064c0.136533-0.1024 0.3072-0.068267 0.443733-0.170667a397.824 397.824 0 0 1 94.993067-42.973866c2.7648-0.8192 5.495467-1.7408 8.2944-2.491734 5.7344-1.604267 11.5712-3.003733 17.373866-4.334933a367.8208 367.8208 0 0 1 47.342934-7.953067c3.8912-0.443733 7.7824-0.9216 11.6736-1.2288 10.410667-0.785067 20.8896-1.3312 31.505066-1.3312s21.060267 0.546133 31.505067 1.3312c3.8912 0.3072 7.816533 0.785067 11.707733 1.2288a361.3696 361.3696 0 0 1 47.240534 7.953067c5.870933 1.3312 11.707733 2.730667 17.5104 4.334933 2.696533 0.750933 5.358933 1.6384 8.021333 2.4576 33.348267 10.103467 65.365333 24.405333 95.197867 43.008 0.136533 0.1024 0.3072 0.068267 0.443733 0.170667a396.151467 396.151467 0 0 1 116.599467 111.2064c0.1024 0.136533 0.1024 0.273067 0.170666 0.375467 13.687467 19.7632 25.3952 40.5504 35.191467 62.1568l1.467733 3.037866c4.3008 9.659733 8.055467 19.592533 11.605334 29.5936 0.546133 1.604267 1.2288 3.106133 1.774933 4.7104 3.822933 11.4688 7.236267 23.176533 10.0352 35.0208a31.061333 31.061333 0 0 0 60.450133-14.336zm-249.275733-560.2304A199.850667 199.850667 0 0 1 512 543.197867a199.850667 199.850667 0 0 1-199.5776-199.611734A199.816533 199.816533 0 0 1 512 144.008533a199.816533 199.816533 0 0 1 199.5776 199.5776z" fill="#FFFFFF"/&gt;&lt;/svg&gt;</value>
</data> </data>
<data name="segmentedItem5.IconActiveSvg" xml:space="preserve"> <data name="segmentedItem10.IconActiveSvg" xml:space="preserve">
<value>&lt;svg viewBox="0 0 1027 1024" xmlns="http://www.w3.org/2000/svg" width="200" height="200"&gt;&lt;path d="M512 0C229.376 0 0 229.376 0 512s229.376 512 512 512 512-229.376 512-512S794.624 0 512 0zm0 963.584c-249.344 0-451.584-202.24-451.584-451.584S262.656 60.416 512 60.416s451.584 202.24 451.584 451.584-202.24 451.584-451.584 451.584z" fill="#FFFFFF"/&gt;&lt;path d="M437.314 840.84l-18.967-5.795c-43.935-13.425-84.182-35.551-119.623-65.767l-15.203-12.962 11.199-16.544c17.376-25.668 17.938-59.158 1.433-85.319-14.356-22.787-39.028-36.385-66.006-36.385-4.102 0-8.229 0.328-12.267 0.974l-19.752 3.158-5.301-19.288c-8.196-29.823-12.353-59.896-12.353-89.381 0-19.675 1.863-39.491 5.694-60.582l3.652-20.105 20.349 1.862c2.343 0.214 4.726 0.323 7.081 0.323 29.007 0 55.436-15.908 68.974-41.516 14.941-28.2 11.264-62.223-9.356-86.694l-13.166-15.625L278.1 276.7c38.694-38.954 86.677-68.095 138.76-84.273l19.741-6.132 7.631 19.211c11.88 29.908 40.312 49.234 72.432 49.234 32.097 0 60.521-19.328 72.413-49.241l7.632-19.197 19.73 6.122c43.968 13.642 84.295 36.164 119.862 66.938l15.414 13.337-11.883 16.561c-18.636 25.975-19.684 60.166-2.671 87.105 14.369 22.78 39.055 36.373 66.04 36.372 4.344 0 8.71-0.366 12.978-1.087l20.143-3.403 5.176 19.762c7.539 28.792 11.362 57.566 11.362 85.522 0 21.328-2.143 43.048-6.365 64.554l-3.859 19.65-19.952-1.709a77.999 77.999 0 0 0-6.612-0.281c-28.998 0-55.44 15.917-69.009 41.542-14.47 27.405-11.311 60.816 8.063 85.095l12.496 15.661-14.222 14.111c-38.674 38.378-86.551 67.041-138.455 82.892l-18.968 5.792-7.988-18.152c-12.462-28.318-40.459-46.617-71.325-46.617-30.883 0-58.893 18.299-71.36 46.619l-7.99 18.152zm-95.455-94.18c22.324 16.82 46.59 30.174 72.469 39.881 22.445-34.023 60.731-55.125 102.336-55.125 41.59 0 79.862 21.1 102.303 55.12 32.745-12.298 63.249-30.557 89.663-53.667-19.709-35.774-20.525-79.555-1.04-116.455 19.699-37.203 56.634-61.386 98.053-64.883 1.705-12.731 2.565-25.453 2.565-38 0-18.339-1.923-37.155-5.729-56.144-42.123-0.241-80.616-21.581-103.077-57.189-22.944-36.331-25.024-81.029-6.697-118.768-22.165-16.932-46.203-30.4-71.788-40.221-8.847 14.328-20.577 26.719-34.618 36.447-20.522 14.219-44.602 21.735-69.635 21.735-25.044 0-49.131-7.516-69.657-21.734-14.042-9.727-25.773-22.116-34.618-36.441-32.551 12.503-62.856 30.935-89.106 54.196 21.198 36.233 22.547 80.974 2.407 118.987-19.71 37.285-56.808 61.499-98.402 64.875-1.45 11.713-2.161 23.035-2.161 34.255 0 19.715 2.166 39.792 6.449 59.894 41.851 0.474 80.029 21.785 102.35 57.214 22.218 35.217 24.782 78.871 7.933 116.023z" fill="#FFFFFF"/&gt;&lt;path d="M516.664 633.864c-66.246 0-120.141-53.897-120.141-120.147 0-66.249 53.895-120.146 120.141-120.146 66.237 0 120.127 53.897 120.127 120.146 0 66.25-53.89 120.147-120.127 120.147zm0-195.641c-41.625 0-75.488 33.866-75.488 75.494s33.863 75.495 75.488 75.495c41.617 0 75.475-33.867 75.475-75.495s-33.858-75.494-75.475-75.494z" fill="#FFFFFF"/&gt;&lt;/svg&gt;</value> <value>&lt;svg viewBox="0 0 1027 1024" xmlns="http://www.w3.org/2000/svg" width="200" height="200"&gt;&lt;path d="M512 0C229.376 0 0 229.376 0 512s229.376 512 512 512 512-229.376 512-512S794.624 0 512 0zm0 963.584c-249.344 0-451.584-202.24-451.584-451.584S262.656 60.416 512 60.416s451.584 202.24 451.584 451.584-202.24 451.584-451.584 451.584z" fill="#FFFFFF"/&gt;&lt;path d="M437.314 840.84l-18.967-5.795c-43.935-13.425-84.182-35.551-119.623-65.767l-15.203-12.962 11.199-16.544c17.376-25.668 17.938-59.158 1.433-85.319-14.356-22.787-39.028-36.385-66.006-36.385-4.102 0-8.229 0.328-12.267 0.974l-19.752 3.158-5.301-19.288c-8.196-29.823-12.353-59.896-12.353-89.381 0-19.675 1.863-39.491 5.694-60.582l3.652-20.105 20.349 1.862c2.343 0.214 4.726 0.323 7.081 0.323 29.007 0 55.436-15.908 68.974-41.516 14.941-28.2 11.264-62.223-9.356-86.694l-13.166-15.625L278.1 276.7c38.694-38.954 86.677-68.095 138.76-84.273l19.741-6.132 7.631 19.211c11.88 29.908 40.312 49.234 72.432 49.234 32.097 0 60.521-19.328 72.413-49.241l7.632-19.197 19.73 6.122c43.968 13.642 84.295 36.164 119.862 66.938l15.414 13.337-11.883 16.561c-18.636 25.975-19.684 60.166-2.671 87.105 14.369 22.78 39.055 36.373 66.04 36.372 4.344 0 8.71-0.366 12.978-1.087l20.143-3.403 5.176 19.762c7.539 28.792 11.362 57.566 11.362 85.522 0 21.328-2.143 43.048-6.365 64.554l-3.859 19.65-19.952-1.709a77.999 77.999 0 0 0-6.612-0.281c-28.998 0-55.44 15.917-69.009 41.542-14.47 27.405-11.311 60.816 8.063 85.095l12.496 15.661-14.222 14.111c-38.674 38.378-86.551 67.041-138.455 82.892l-18.968 5.792-7.988-18.152c-12.462-28.318-40.459-46.617-71.325-46.617-30.883 0-58.893 18.299-71.36 46.619l-7.99 18.152zm-95.455-94.18c22.324 16.82 46.59 30.174 72.469 39.881 22.445-34.023 60.731-55.125 102.336-55.125 41.59 0 79.862 21.1 102.303 55.12 32.745-12.298 63.249-30.557 89.663-53.667-19.709-35.774-20.525-79.555-1.04-116.455 19.699-37.203 56.634-61.386 98.053-64.883 1.705-12.731 2.565-25.453 2.565-38 0-18.339-1.923-37.155-5.729-56.144-42.123-0.241-80.616-21.581-103.077-57.189-22.944-36.331-25.024-81.029-6.697-118.768-22.165-16.932-46.203-30.4-71.788-40.221-8.847 14.328-20.577 26.719-34.618 36.447-20.522 14.219-44.602 21.735-69.635 21.735-25.044 0-49.131-7.516-69.657-21.734-14.042-9.727-25.773-22.116-34.618-36.441-32.551 12.503-62.856 30.935-89.106 54.196 21.198 36.233 22.547 80.974 2.407 118.987-19.71 37.285-56.808 61.499-98.402 64.875-1.45 11.713-2.161 23.035-2.161 34.255 0 19.715 2.166 39.792 6.449 59.894 41.851 0.474 80.029 21.785 102.35 57.214 22.218 35.217 24.782 78.871 7.933 116.023z" fill="#FFFFFF"/&gt;&lt;path d="M516.664 633.864c-66.246 0-120.141-53.897-120.141-120.147 0-66.249 53.895-120.146 120.141-120.146 66.237 0 120.127 53.897 120.127 120.146 0 66.25-53.89 120.147-120.127 120.147zm0-195.641c-41.625 0-75.488 33.866-75.488 75.494s33.863 75.495 75.488 75.495c41.617 0 75.475-33.867 75.475-75.495s-33.858-75.494-75.475-75.494z" fill="#FFFFFF"/&gt;&lt;/svg&gt;</value>
</data> </data>
<data name="segmentedItem5.IconSvg" xml:space="preserve"> <data name="segmentedItem10.IconSvg" xml:space="preserve">
<value>&lt;svg viewBox="0 0 1027 1024" xmlns="http://www.w3.org/2000/svg" width="200" height="200"&gt;&lt;path d="M512 0C229.376 0 0 229.376 0 512s229.376 512 512 512 512-229.376 512-512S794.624 0 512 0zm0 963.584c-249.344 0-451.584-202.24-451.584-451.584S262.656 60.416 512 60.416s451.584 202.24 451.584 451.584-202.24 451.584-451.584 451.584z" fill="#FFFFFF"/&gt;&lt;path d="M437.314 840.84l-18.967-5.795c-43.935-13.425-84.182-35.551-119.623-65.767l-15.203-12.962 11.199-16.544c17.376-25.668 17.938-59.158 1.433-85.319-14.356-22.787-39.028-36.385-66.006-36.385-4.102 0-8.229 0.328-12.267 0.974l-19.752 3.158-5.301-19.288c-8.196-29.823-12.353-59.896-12.353-89.381 0-19.675 1.863-39.491 5.694-60.582l3.652-20.105 20.349 1.862c2.343 0.214 4.726 0.323 7.081 0.323 29.007 0 55.436-15.908 68.974-41.516 14.941-28.2 11.264-62.223-9.356-86.694l-13.166-15.625L278.1 276.7c38.694-38.954 86.677-68.095 138.76-84.273l19.741-6.132 7.631 19.211c11.88 29.908 40.312 49.234 72.432 49.234 32.097 0 60.521-19.328 72.413-49.241l7.632-19.197 19.73 6.122c43.968 13.642 84.295 36.164 119.862 66.938l15.414 13.337-11.883 16.561c-18.636 25.975-19.684 60.166-2.671 87.105 14.369 22.78 39.055 36.373 66.04 36.372 4.344 0 8.71-0.366 12.978-1.087l20.143-3.403 5.176 19.762c7.539 28.792 11.362 57.566 11.362 85.522 0 21.328-2.143 43.048-6.365 64.554l-3.859 19.65-19.952-1.709a77.999 77.999 0 0 0-6.612-0.281c-28.998 0-55.44 15.917-69.009 41.542-14.47 27.405-11.311 60.816 8.063 85.095l12.496 15.661-14.222 14.111c-38.674 38.378-86.551 67.041-138.455 82.892l-18.968 5.792-7.988-18.152c-12.462-28.318-40.459-46.617-71.325-46.617-30.883 0-58.893 18.299-71.36 46.619l-7.99 18.152zm-95.455-94.18c22.324 16.82 46.59 30.174 72.469 39.881 22.445-34.023 60.731-55.125 102.336-55.125 41.59 0 79.862 21.1 102.303 55.12 32.745-12.298 63.249-30.557 89.663-53.667-19.709-35.774-20.525-79.555-1.04-116.455 19.699-37.203 56.634-61.386 98.053-64.883 1.705-12.731 2.565-25.453 2.565-38 0-18.339-1.923-37.155-5.729-56.144-42.123-0.241-80.616-21.581-103.077-57.189-22.944-36.331-25.024-81.029-6.697-118.768-22.165-16.932-46.203-30.4-71.788-40.221-8.847 14.328-20.577 26.719-34.618 36.447-20.522 14.219-44.602 21.735-69.635 21.735-25.044 0-49.131-7.516-69.657-21.734-14.042-9.727-25.773-22.116-34.618-36.441-32.551 12.503-62.856 30.935-89.106 54.196 21.198 36.233 22.547 80.974 2.407 118.987-19.71 37.285-56.808 61.499-98.402 64.875-1.45 11.713-2.161 23.035-2.161 34.255 0 19.715 2.166 39.792 6.449 59.894 41.851 0.474 80.029 21.785 102.35 57.214 22.218 35.217 24.782 78.871 7.933 116.023z" fill="#FFFFFF"/&gt;&lt;path d="M516.664 633.864c-66.246 0-120.141-53.897-120.141-120.147 0-66.249 53.895-120.146 120.141-120.146 66.237 0 120.127 53.897 120.127 120.146 0 66.25-53.89 120.147-120.127 120.147zm0-195.641c-41.625 0-75.488 33.866-75.488 75.494s33.863 75.495 75.488 75.495c41.617 0 75.475-33.867 75.475-75.495s-33.858-75.494-75.475-75.494z" fill="#FFFFFF"/&gt;&lt;/svg&gt;</value> <value>&lt;svg viewBox="0 0 1027 1024" xmlns="http://www.w3.org/2000/svg" width="200" height="200"&gt;&lt;path d="M512 0C229.376 0 0 229.376 0 512s229.376 512 512 512 512-229.376 512-512S794.624 0 512 0zm0 963.584c-249.344 0-451.584-202.24-451.584-451.584S262.656 60.416 512 60.416s451.584 202.24 451.584 451.584-202.24 451.584-451.584 451.584z" fill="#FFFFFF"/&gt;&lt;path d="M437.314 840.84l-18.967-5.795c-43.935-13.425-84.182-35.551-119.623-65.767l-15.203-12.962 11.199-16.544c17.376-25.668 17.938-59.158 1.433-85.319-14.356-22.787-39.028-36.385-66.006-36.385-4.102 0-8.229 0.328-12.267 0.974l-19.752 3.158-5.301-19.288c-8.196-29.823-12.353-59.896-12.353-89.381 0-19.675 1.863-39.491 5.694-60.582l3.652-20.105 20.349 1.862c2.343 0.214 4.726 0.323 7.081 0.323 29.007 0 55.436-15.908 68.974-41.516 14.941-28.2 11.264-62.223-9.356-86.694l-13.166-15.625L278.1 276.7c38.694-38.954 86.677-68.095 138.76-84.273l19.741-6.132 7.631 19.211c11.88 29.908 40.312 49.234 72.432 49.234 32.097 0 60.521-19.328 72.413-49.241l7.632-19.197 19.73 6.122c43.968 13.642 84.295 36.164 119.862 66.938l15.414 13.337-11.883 16.561c-18.636 25.975-19.684 60.166-2.671 87.105 14.369 22.78 39.055 36.373 66.04 36.372 4.344 0 8.71-0.366 12.978-1.087l20.143-3.403 5.176 19.762c7.539 28.792 11.362 57.566 11.362 85.522 0 21.328-2.143 43.048-6.365 64.554l-3.859 19.65-19.952-1.709a77.999 77.999 0 0 0-6.612-0.281c-28.998 0-55.44 15.917-69.009 41.542-14.47 27.405-11.311 60.816 8.063 85.095l12.496 15.661-14.222 14.111c-38.674 38.378-86.551 67.041-138.455 82.892l-18.968 5.792-7.988-18.152c-12.462-28.318-40.459-46.617-71.325-46.617-30.883 0-58.893 18.299-71.36 46.619l-7.99 18.152zm-95.455-94.18c22.324 16.82 46.59 30.174 72.469 39.881 22.445-34.023 60.731-55.125 102.336-55.125 41.59 0 79.862 21.1 102.303 55.12 32.745-12.298 63.249-30.557 89.663-53.667-19.709-35.774-20.525-79.555-1.04-116.455 19.699-37.203 56.634-61.386 98.053-64.883 1.705-12.731 2.565-25.453 2.565-38 0-18.339-1.923-37.155-5.729-56.144-42.123-0.241-80.616-21.581-103.077-57.189-22.944-36.331-25.024-81.029-6.697-118.768-22.165-16.932-46.203-30.4-71.788-40.221-8.847 14.328-20.577 26.719-34.618 36.447-20.522 14.219-44.602 21.735-69.635 21.735-25.044 0-49.131-7.516-69.657-21.734-14.042-9.727-25.773-22.116-34.618-36.441-32.551 12.503-62.856 30.935-89.106 54.196 21.198 36.233 22.547 80.974 2.407 118.987-19.71 37.285-56.808 61.499-98.402 64.875-1.45 11.713-2.161 23.035-2.161 34.255 0 19.715 2.166 39.792 6.449 59.894 41.851 0.474 80.029 21.785 102.35 57.214 22.218 35.217 24.782 78.871 7.933 116.023z" fill="#FFFFFF"/&gt;&lt;path d="M516.664 633.864c-66.246 0-120.141-53.897-120.141-120.147 0-66.249 53.895-120.146 120.141-120.146 66.237 0 120.127 53.897 120.127 120.146 0 66.25-53.89 120.147-120.127 120.147zm0-195.641c-41.625 0-75.488 33.866-75.488 75.494s33.863 75.495 75.488 75.495c41.617 0 75.475-33.867 75.475-75.495s-33.858-75.494-75.475-75.494z" fill="#FFFFFF"/&gt;&lt;/svg&gt;</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" />

View File

@ -87,7 +87,7 @@
this.tsmiClearLog2.Name = "tsmiClearLog2"; this.tsmiClearLog2.Name = "tsmiClearLog2";
this.tsmiClearLog2.Size = new System.Drawing.Size(68, 21); this.tsmiClearLog2.Size = new System.Drawing.Size(68, 21);
this.tsmiClearLog2.Text = "清空日志"; this.tsmiClearLog2.Text = "清空日志";
this.tsmiClearLog2.Click += new System.EventHandler(this.tsmiClearLog2_Click); // this.tsmiClearLog2.Click += new System.EventHandler(this.tsmiClearLog2_Click);
// //
// lvLog // lvLog
// //

View File

@ -11,226 +11,534 @@ using System.Threading.Tasks;
using System.Windows.Forms; using System.Windows.Forms;
using static DH.Commons.Enums.EnumHelper; using static DH.Commons.Enums.EnumHelper;
using DH.Commons.Enums; using DH.Commons.Enums;
using System.ComponentModel;
using System.Reflection;
namespace DHSoftware.Views namespace DHSoftware.Views
{ {
public partial class FrmLog : UserControl public partial class FrmLog : UserControl
{ {
#region Win32 API双缓冲处理
private const int LVM_SETEXTENDEDLISTVIEWSTYLE = 0x1036;
private const int LVS_EX_DOUBLEBUFFER = 0x00010000;
[System.Runtime.InteropServices.DllImport("user32.dll")]
private static extern int SendMessage(IntPtr hWnd, int wMsg, int wParam, int lParam);
#endregion
#region
private const string SOURCE_PROCESS = "流程";
private const int LOG_NUM_LIMIT = 2000;
private const int BATCH_SIZE = 50;
private const int PROCESS_INTERVAL = 100;
private const int FIRST_COL_WIDTH = 120;
#endregion
#region
private readonly ConcurrentQueue<LogMsg> _logQueue = new ConcurrentQueue<LogMsg>();
private List<LogMsg> _logBuffer = new List<LogMsg>();
private List<LogLevel> _showLevels = new List<LogLevel>();
private List<string> _showSources = new List<string>();
private Task _logTask;
private static readonly object _logLock = new object();
#endregion
public FrmLog() public FrmLog()
{ {
InitializeComponent(); InitializeComponent();
InitializeCustomComponents();
}
private void InitializeCustomComponents()
{
// 启用双缓冲
SendMessage(lvLog.Handle, LVM_SETEXTENDEDLISTVIEWSTYLE,
LVS_EX_DOUBLEBUFFER, LVS_EX_DOUBLEBUFFER);
lvLog.ShowItemToolTips = true; lvLog.ShowItemToolTips = true;
lvLog.FullRowSelect = true;
lvLog.View = View.Details;
// 启用自定义绘制
//lvLog.OwnerDraw = true;
//lvLog.DrawColumnHeader += LvLog_DrawColumnHeader;
//lvLog.DrawSubItem += LvLog_DrawSubItem;
//lvLog.DrawItem += LvLog_DrawItem;
this.Load += (s, e) => // 初始化列头
lvLog.Columns.Add("时间", FIRST_COL_WIDTH);
lvLog.Columns.Add("来源", 150);
lvLog.Columns.Add("内容", 400);
InitializeLevelFilter();
StartProcessingTask();
}
private void InitializeLevelFilter()
{ {
_showLevels.Clear(); _showLevels.Clear();
tsmiLogLevels.DropDownItems.Clear(); tsmiLogLevels.DropDownItems.Clear();
JsonConvert.DeserializeObject<List<dynamic>>(JsonConvert.SerializeObject(EnumHelper.GetEnumListByType(typeof(LogLevel)))).ForEach(d =>
{
LogLevel lvl = (LogLevel)((int)d.Value);
ToolStripMenuItem item = new ToolStripMenuItem(d.Desc.ToString());
item.CheckOnClick = true;
item.Checked = true;
item.Tag = lvl;
item.CheckedChanged += LevelItem_CheckedChanged;
item.BackColor = lvl.GetEnumSelectedColor(); foreach (LogLevel level in Enum.GetValues(typeof(LogLevel)))
item.ForeColor = lvl.GetEnumSelectedFontColor(); {
tsmiLogLevels.DropDownItems.Add(item); var item = new ToolStripMenuItem(level.GetEnumDescription())
_showLevels.Add(lvl); {
}); CheckOnClick = true,
Checked = true,
Tag = level,
BackColor = level.GetEnumSelectedColor(),
ForeColor = level.GetEnumSelectedFontColor()
}; };
item.CheckedChanged += LevelItem_CheckedChanged;
tsmiLogLevels.DropDownItems.Add(item);
_showLevels.Add(level);
}
}
#region
private void LvLog_DrawColumnHeader(object sender, DrawListViewColumnHeaderEventArgs e)
{
e.DrawDefault = true;
} }
//public override void OnProcessUpdated() private void LvLog_DrawSubItem(object sender, DrawListViewSubItemEventArgs e)
{
var item = e.Item;
var log = item.Tag as LogMsg;
// 设置背景色
e.Graphics.FillRectangle(new SolidBrush(log.LogLevel.GetEnumSelectedColor()), e.Bounds);
// 设置文字颜色
TextRenderer.DrawText(e.Graphics, e.SubItem.Text, lvLog.Font,
e.Bounds, log.LogLevel.GetEnumSelectedFontColor(), TextFormatFlags.Left);
}
//private ListViewItem CreateLogItem(LogMsg log)
//{ //{
// var item = new ListViewItem(log.LogTime.ToString("HH:mm:ss.fff"));
// item.SubItems.Add(FormatSource(log));
// Invoke(new Action(() => // item.SubItems.Add(log.Msg);
// { // item.Tag = log; // 重要将日志对象绑定到Tag
// _showDevice.Clear(); // return item;
// tsmiLogSources.DropDownItems.Clear();
// ToolStripMenuItem processItem = new ToolStripMenuItem(SOURCE_PROCESS);
// processItem.CheckOnClick = true;
// processItem.Checked = true;
// processItem.CheckedChanged += SourceItem_CheckedChanged;
// tsmiLogSources.DropDownItems.Add(processItem);
// _showDevice.Add(SOURCE_PROCESS);
// Process.DeviceCollection.ForEach(d =>
// {
// ToolStripMenuItem item = new ToolStripMenuItem(d.Name);
// item.CheckOnClick = true;
// item.Checked = true;
// item.CheckedChanged += SourceItem_CheckedChanged;
// tsmiLogSources.DropDownItems.Add(item);
// _showDevice.Add(d.Name);
// });
// }));
//} //}
private void LvLog_DrawItem(object sender, DrawListViewItemEventArgs e)
{
e.DrawDefault = false; // 禁用默认绘制
}
#endregion
private void StartProcessingTask()
{
lock (_logLock)
{
if (_logTask == null || _logTask.IsCompleted)
{
_logTask = Task.Run(ProcessLogs);
}
}
}
private async Task ProcessLogs()
{
while (!IsDisposed)
{
try
{
await Task.Delay(PROCESS_INTERVAL);
ProcessBatch(BATCH_SIZE);
}
catch (Exception ex)
{
DebugWrite($"日志处理异常: {ex.Message}");
}
}
}
private void ProcessBatch(int batchSize)
{
if (InvokeRequired)
{
BeginInvoke(new Action(() => ProcessBatch(batchSize)));
return;
}
lvLog.BeginUpdate();
try
{
var items = new List<ListViewItem>();
int processed = 0;
while (processed < batchSize && _logQueue.TryDequeue(out var log))
{
_logBuffer.Add(log);
if (ShouldShow(log))
{
items.Add(CreateLogItem(log));
processed++;
}
}
if (items.Count > 0)
{
lvLog.Items.AddRange(items.ToArray());
MaintainBuffer();
AutoScrollIfNeeded();
}
}
finally
{
lvLog.EndUpdate();
UpdateLayout();
}
}
private bool ShouldShow(LogMsg log)
{
return _showLevels.Contains(log.LogLevel) &&
(_showSources.Count == 0 ||
(string.IsNullOrEmpty(log.MsgSource) ?
_showSources.Contains(SOURCE_PROCESS) :
_showSources.Contains(log.MsgSource)));
}
private ListViewItem CreateLogItem(LogMsg log)
{
var item = new ListViewItem(log.LogTime.ToString("HH:mm:ss.fff"));
item.SubItems.Add(FormatSource(log));
item.SubItems.Add(log.Msg);
item.ToolTipText = log.Msg;
item.BackColor = log.LogLevel.GetEnumSelectedColor();
item.ForeColor = log.LogLevel.GetEnumSelectedFontColor();
return item;
}
private string FormatSource(LogMsg log)
{
return string.IsNullOrEmpty(log.MsgSource) ?
SOURCE_PROCESS :
$"{log.MsgSource}[{log.ThreadId}]";
}
private void MaintainBuffer()
{
if (_logBuffer.Count > LOG_NUM_LIMIT * 2)
{
_logBuffer = _logBuffer
.Skip(_logBuffer.Count - LOG_NUM_LIMIT)
.ToList();
RefreshLogs();
}
}
public void AddLog(LogMsg log)
{
_logQueue.Enqueue(log);
}
private void RefreshLogs()
{
lvLog.BeginUpdate();
try
{
lvLog.Items.Clear();
var items = _logBuffer
.Where(ShouldShow)
.Select(CreateLogItem);
lvLog.Items.AddRange(items.ToArray());
}
finally
{
lvLog.EndUpdate();
UpdateLayout();
}
}
private void AutoScrollIfNeeded()
{
if (lvLog.Items.Count > 0 /*&& chkAutoScroll.Checked*/)
{
lvLog.EnsureVisible(lvLog.Items.Count - 1);
}
}
private void UpdateLayout()
{
if (lvLog.Columns.Count < 3) return;
// 动态调整列宽
lvLog.Columns[0].Width = FIRST_COL_WIDTH;
lvLog.Columns[1].Width = lvLog.Width > 600 ? 150 : 0;
lvLog.Columns[2].Width = lvLog.ClientSize.Width -
lvLog.Columns[0].Width -
lvLog.Columns[1].Width -
SystemInformation.VerticalScrollBarWidth;
}
#region
private void LevelItem_CheckedChanged(object sender, EventArgs e) private void LevelItem_CheckedChanged(object sender, EventArgs e)
{ {
_showLevels.Clear(); _showLevels = tsmiLogLevels.DropDownItems
foreach (ToolStripMenuItem item in tsmiLogLevels.DropDownItems) .Cast<ToolStripMenuItem>()
{ .Where(i => i.Checked)
if (item.Checked) .Select(i => (LogLevel)i.Tag)
{ .ToList();
LogLevel lv = (LogLevel)Convert.ToInt32(item.Tag);
_showLevels.Add(lv);
}
}
RefreshLogs(); RefreshLogs();
} }
private void SourceItem_CheckedChanged(object sender, EventArgs e) private void SourceItem_CheckedChanged(object sender, EventArgs e)
{ {
_showDevice.Clear(); _showSources = tsmiLogSources.DropDownItems
foreach (ToolStripMenuItem item in tsmiLogSources.DropDownItems) .Cast<ToolStripMenuItem>()
{ .Where(i => i.Checked)
if (item.Checked) .Select(i => i.Text)
{ .ToList();
_showDevice.Add(item.Text);
}
}
RefreshLogs(); RefreshLogs();
} }
//public TaskFactory _taskFactory = new TaskFactory(TaskCreationOptions.LongRunning, TaskContinuationOptions.LongRunning);
readonly ConcurrentQueue<LogMsg> _logQueue = new ConcurrentQueue<LogMsg>();
Task _logTask = null;
static readonly object _logLock = new object();
List<LogMsg> _logBuffer = new List<LogMsg>();
List<LogLevel> _showLevels = new List<LogLevel>();
List<string> _showDevice = new List<string>();
const string SOURCE_PROCESS = "流程";
const int LOG_NUM_LIMIT = 20;
public void LogDisplay(LogMsg msg)
{
_logQueue.Enqueue(msg);
lock (_logLock)
{
if (_logTask == null)
{
_logTask = Task.Run(async () =>
{
while (true)
{
try
{
Invoke(new Action(() =>
{
bool isNeedScroll = false;
while (_logQueue.TryDequeue(out LogMsg log))
{
_logBuffer.Add(log);
if (_showLevels.Contains(log.LogLevel) && (_showDevice.Count == 0 || (string.IsNullOrWhiteSpace(log.MsgSource) && _showDevice.Contains(SOURCE_PROCESS)) || _showDevice.Contains(log.MsgSource)))
{
isNeedScroll = true;
ListViewItem item = new ListViewItem($"{log.LogTime.ToString("HH:mm:ss.fff")}");
item.SubItems.Add($"{log.MsgSource}[{log.ThreadId}]");
item.SubItems.Add(log.Msg);
item.ToolTipText = log.Msg;
item.ForeColor = log.LogLevel.GetEnumSelectedFontColor();
item.BackColor = log.LogLevel.GetEnumSelectedColor();
lvLog.Items.Add(item);
}
}
if (_logBuffer.Count > LOG_NUM_LIMIT * 2)
{
_logBuffer = _logBuffer.Skip(_logBuffer.Count - LOG_NUM_LIMIT).ToList();
RefreshLogs();
isNeedScroll = true;
}
if (isNeedScroll && lvLog.Items.Count > 0)
{
RefreshLvLayout();
}
}));
}
catch (Exception ex)
{
}
await Task.Delay(2000);
}
});
}
}
}
private void RefreshLogs()
{
lvLog.Items.Clear();
_logBuffer.ForEach(log =>
{
if (_showLevels.Contains(log.LogLevel) && ((string.IsNullOrWhiteSpace(log.MsgSource) && _showDevice.Contains(SOURCE_PROCESS)) || _showDevice.Contains(log.MsgSource)))
{
ListViewItem item = new ListViewItem($"{log.LogTime.ToString("HH:mm:ss.fff")}");
item.SubItems.Add($"{log.MsgSource}[{log.ThreadId}]");
item.SubItems.Add(log.Msg);
item.ToolTipText = log.Msg;
item.ForeColor = log.LogLevel.GetEnumSelectedFontColor();
item.BackColor = log.LogLevel.GetEnumSelectedColor();
lvLog.Items.Add(item);
}
});
RefreshLvLayout();
}
private void lvLog_SizeChanged(object sender, EventArgs e)
{
RefreshLvLayout();
}
int width_1stCol = 80;
public event Action<LogMsg> OnLogMsgOutput;
private void RefreshLvLayout()
{
if (lvLog.Columns.Count <= 0)
return;
lvLog.Columns[0].Width = width_1stCol;
if (lvLog.Width <= lvLog.Height)
{
lvLog.Columns[1].Width = 0;
}
else
{
lvLog.Columns[1].AutoResize(ColumnHeaderAutoResizeStyle.ColumnContent);
}
lvLog.Columns[2].Width = lvLog.Width - width_1stCol - lvLog.Columns[1].Width - 10;
if (lvLog.Items.Count > 0)
lvLog.EnsureVisible(lvLog.Items.Count - 1);
}
private void tsmiClearLog_Click(object sender, EventArgs e) private void tsmiClearLog_Click(object sender, EventArgs e)
{ {
lvLog.Items.Clear(); lvLog.Items.Clear();
_logBuffer.Clear();
} }
private void tsmiClearLog2_Click(object sender, EventArgs e) private void lvLog_SizeChanged(object sender, EventArgs e)
{ {
lvLog.Items.Clear(); UpdateLayout();
} }
#endregion
#region
private void DebugWrite(string message)
{
System.Diagnostics.Debug.WriteLine($"[{DateTime.Now:HH:mm:ss.fff}] {message}");
} }
#endregion
}
//public partial class FrmLog1 : UserControl
//{
// // 添加双缓冲字段
// private const int LVM_SETEXTENDEDLISTVIEWSTYLE = 0x1036;
// private const int LVS_EX_DOUBLEBUFFER = 0x00010000;
// [System.Runtime.InteropServices.DllImport("user32.dll")]
// private static extern int SendMessage(IntPtr hWnd, int wMsg, int wParam, int lParam);
// public FrmLog()
// {
// InitializeComponent();
// // 启用双缓冲
// SendMessage(lvLog.Handle, LVM_SETEXTENDEDLISTVIEWSTYLE, LVS_EX_DOUBLEBUFFER, LVS_EX_DOUBLEBUFFER);
// lvLog.ShowItemToolTips = true;
// this.Load += (s, e) =>
// {
// _showLevels.Clear();
// tsmiLogLevels.DropDownItems.Clear();
// JsonConvert.DeserializeObject<List<dynamic>>(JsonConvert.SerializeObject(EnumHelper.GetEnumListByType(typeof(LogLevel)))).ForEach(d =>
// {
// LogLevel lvl = (LogLevel)((int)d.Value);
// ToolStripMenuItem item = new ToolStripMenuItem(d.Desc.ToString());
// item.CheckOnClick = true;
// item.Checked = true;
// item.Tag = lvl;
// item.CheckedChanged += LevelItem_CheckedChanged;
// item.BackColor = lvl.GetEnumSelectedColor();
// item.ForeColor = lvl.GetEnumSelectedFontColor();
// tsmiLogLevels.DropDownItems.Add(item);
// _showLevels.Add(lvl);
// });
// };
// }
// //public override void OnProcessUpdated()
// //{
// // Invoke(new Action(() =>
// // {
// // _showDevice.Clear();
// // tsmiLogSources.DropDownItems.Clear();
// // ToolStripMenuItem processItem = new ToolStripMenuItem(SOURCE_PROCESS);
// // processItem.CheckOnClick = true;
// // processItem.Checked = true;
// // processItem.CheckedChanged += SourceItem_CheckedChanged;
// // tsmiLogSources.DropDownItems.Add(processItem);
// // _showDevice.Add(SOURCE_PROCESS);
// // Process.DeviceCollection.ForEach(d =>
// // {
// // ToolStripMenuItem item = new ToolStripMenuItem(d.Name);
// // item.CheckOnClick = true;
// // item.Checked = true;
// // item.CheckedChanged += SourceItem_CheckedChanged;
// // tsmiLogSources.DropDownItems.Add(item);
// // _showDevice.Add(d.Name);
// // });
// // }));
// //}
// private void LevelItem_CheckedChanged(object sender, EventArgs e)
// {
// _showLevels.Clear();
// foreach (ToolStripMenuItem item in tsmiLogLevels.DropDownItems)
// {
// if (item.Checked)
// {
// LogLevel lv = (LogLevel)Convert.ToInt32(item.Tag);
// _showLevels.Add(lv);
// }
// }
// RefreshLogs();
// }
// private void SourceItem_CheckedChanged(object sender, EventArgs e)
// {
// _showDevice.Clear();
// foreach (ToolStripMenuItem item in tsmiLogSources.DropDownItems)
// {
// if (item.Checked)
// {
// _showDevice.Add(item.Text);
// }
// }
// RefreshLogs();
// }
// //public TaskFactory _taskFactory = new TaskFactory(TaskCreationOptions.LongRunning, TaskContinuationOptions.LongRunning);
// readonly ConcurrentQueue<LogMsg> _logQueue = new ConcurrentQueue<LogMsg>();
// Task _logTask = null;
// static readonly object _logLock = new object();
// List<LogMsg> _logBuffer = new List<LogMsg>();
// List<LogLevel> _showLevels = new List<LogLevel>();
// List<string> _showDevice = new List<string>();
// const string SOURCE_PROCESS = "流程";
// const int LOG_NUM_LIMIT = 20;
// public void LogDisplay(LogMsg msg)
// {
// _logQueue.Enqueue(msg);
// lock (_logLock)
// {
// if (_logTask == null)
// {
// _logTask = Task.Run(async () =>
// {
// while (true)
// {
// try
// {
// Invoke(new Action(() =>
// {
// bool isNeedScroll = false;
// while (_logQueue.TryDequeue(out LogMsg log))
// {
// _logBuffer.Add(log);
// if (_showLevels.Contains(log.LogLevel) && (_showDevice.Count == 0 || (string.IsNullOrWhiteSpace(log.MsgSource) && _showDevice.Contains(SOURCE_PROCESS)) || _showDevice.Contains(log.MsgSource)))
// {
// isNeedScroll = true;
// ListViewItem item = new ListViewItem($"{log.LogTime.ToString("HH:mm:ss.fff")}");
// item.SubItems.Add($"{log.MsgSource}[{log.ThreadId}]");
// item.SubItems.Add(log.Msg);
// item.ToolTipText = log.Msg;
// item.ForeColor = log.LogLevel.GetEnumSelectedFontColor();
// item.BackColor = log.LogLevel.GetEnumSelectedColor();
// lvLog.Items.Add(item);
// }
// }
// if (_logBuffer.Count > LOG_NUM_LIMIT * 2)
// {
// _logBuffer = _logBuffer.Skip(_logBuffer.Count - LOG_NUM_LIMIT).ToList();
// RefreshLogs();
// isNeedScroll = true;
// }
// if (isNeedScroll && lvLog.Items.Count > 0)
// {
// RefreshLvLayout();
// }
// }));
// }
// catch (Exception ex)
// {
// }
// await Task.Delay(2000);
// }
// });
// }
// }
// }
// private void RefreshLogs()
// {
// lvLog.Items.Clear();
// _logBuffer.ForEach(log =>
// {
// if (_showLevels.Contains(log.LogLevel) && ((string.IsNullOrWhiteSpace(log.MsgSource) && _showDevice.Contains(SOURCE_PROCESS)) || _showDevice.Contains(log.MsgSource)))
// {
// ListViewItem item = new ListViewItem($"{log.LogTime.ToString("HH:mm:ss.fff")}");
// item.SubItems.Add($"{log.MsgSource}[{log.ThreadId}]");
// item.SubItems.Add(log.Msg);
// item.ToolTipText = log.Msg;
// item.ForeColor = log.LogLevel.GetEnumSelectedFontColor();
// item.BackColor = log.LogLevel.GetEnumSelectedColor();
// lvLog.Items.Add(item);
// }
// });
// RefreshLvLayout();
// }
// private void lvLog_SizeChanged(object sender, EventArgs e)
// {
// RefreshLvLayout();
// }
// int width_1stCol = 80;
// public event Action<LogMsg> OnLogMsgOutput;
// private void RefreshLvLayout()
// {
// if (lvLog.Columns.Count <= 0)
// return;
// lvLog.Columns[0].Width = width_1stCol;
// if (lvLog.Width <= lvLog.Height)
// {
// lvLog.Columns[1].Width = 0;
// }
// else
// {
// lvLog.Columns[1].AutoResize(ColumnHeaderAutoResizeStyle.ColumnContent);
// }
// lvLog.Columns[2].Width = lvLog.Width - width_1stCol - lvLog.Columns[1].Width - 10;
// if (lvLog.Items.Count > 0)
// lvLog.EnsureVisible(lvLog.Items.Count - 1);
// }
// private void tsmiClearLog_Click(object sender, EventArgs e)
// {
// lvLog.Items.Clear();
// }
// private void tsmiClearLog2_Click(object sender, EventArgs e)
// {
// lvLog.Items.Clear();
// }
//}
} }