增加循环检测按钮
@@ -77,11 +77,21 @@
|
||||
<SpecificVersion>False</SpecificVersion>
|
||||
<HintPath>bin\x64\Release\ClassLibrary_ControlBean.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="EPPlus, Version=5.0.3.0, Culture=neutral, PublicKeyToken=ea159fdaa78159a1, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\EPPlus.5.0.3\lib\net45\EPPlus.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="MvCameraControl.Net">
|
||||
<HintPath>..\..\..\..\..\..\..\Program Files (x86)\MVS\Development\DotNet\AnyCpu\MvCameraControl.Net.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="OfficeOpenXml.Extension.AspNetCore, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\OfficeOpenXml.Extension.AspNetCore.1.0.0\lib\netstandard2.0\OfficeOpenXml.Extension.AspNetCore.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="PresentationCore" />
|
||||
<Reference Include="System" />
|
||||
<Reference Include="System.configuration" />
|
||||
<Reference Include="System.Core" />
|
||||
<Reference Include="System.Security" />
|
||||
<Reference Include="System.Threading.Tasks" />
|
||||
<Reference Include="System.Xml.Linq" />
|
||||
<Reference Include="System.Data.DataSetExtensions" />
|
||||
<Reference Include="Microsoft.CSharp" />
|
||||
@@ -115,6 +125,7 @@
|
||||
<DependentUpon>Resources.resx</DependentUpon>
|
||||
<DesignTime>True</DesignTime>
|
||||
</Compile>
|
||||
<None Include="packages.config" />
|
||||
<None Include="Properties\Settings.settings">
|
||||
<Generator>SettingsSingleFileGenerator</Generator>
|
||||
<LastGenOutput>Settings.Designer.cs</LastGenOutput>
|
||||
|
||||
103
HitBotCSharpDemo/ShowForm.Designer.cs
generated
@@ -103,6 +103,12 @@
|
||||
this.btn_Pause = new System.Windows.Forms.Button();
|
||||
this.btn_Start = new System.Windows.Forms.Button();
|
||||
this.tap_Cam = new System.Windows.Forms.TabPage();
|
||||
this.textBox1 = new System.Windows.Forms.TextBox();
|
||||
this.checkBox4 = new System.Windows.Forms.CheckBox();
|
||||
this.checkBox3 = new System.Windows.Forms.CheckBox();
|
||||
this.checkBox2 = new System.Windows.Forms.CheckBox();
|
||||
this.checkBox1 = new System.Windows.Forms.CheckBox();
|
||||
this.button2 = new System.Windows.Forms.Button();
|
||||
this.pictureBox1 = new System.Windows.Forms.PictureBox();
|
||||
this.button1 = new System.Windows.Forms.Button();
|
||||
this.cam_feed = new System.Windows.Forms.PictureBox();
|
||||
@@ -117,6 +123,7 @@
|
||||
this.lbl_Refresh_ID = new System.Windows.Forms.Label();
|
||||
this.tim_IO_Refresh = new System.Windows.Forms.Timer(this.components);
|
||||
this.rit_Coord = new System.Windows.Forms.RichTextBox();
|
||||
this.label1 = new System.Windows.Forms.Label();
|
||||
this.tac_MainForm.SuspendLayout();
|
||||
this.tap_Axis.SuspendLayout();
|
||||
this.grb_R.SuspendLayout();
|
||||
@@ -995,6 +1002,13 @@
|
||||
//
|
||||
// tap_Cam
|
||||
//
|
||||
this.tap_Cam.Controls.Add(this.label1);
|
||||
this.tap_Cam.Controls.Add(this.textBox1);
|
||||
this.tap_Cam.Controls.Add(this.checkBox4);
|
||||
this.tap_Cam.Controls.Add(this.checkBox3);
|
||||
this.tap_Cam.Controls.Add(this.checkBox2);
|
||||
this.tap_Cam.Controls.Add(this.checkBox1);
|
||||
this.tap_Cam.Controls.Add(this.button2);
|
||||
this.tap_Cam.Controls.Add(this.pictureBox1);
|
||||
this.tap_Cam.Controls.Add(this.button1);
|
||||
this.tap_Cam.Controls.Add(this.cam_feed);
|
||||
@@ -1013,22 +1027,84 @@
|
||||
this.tap_Cam.UseVisualStyleBackColor = true;
|
||||
this.tap_Cam.Click += new System.EventHandler(this.tap_Cam_Click);
|
||||
//
|
||||
// textBox1
|
||||
//
|
||||
this.textBox1.Location = new System.Drawing.Point(1026, 72);
|
||||
this.textBox1.Name = "textBox1";
|
||||
this.textBox1.Size = new System.Drawing.Size(100, 28);
|
||||
this.textBox1.TabIndex = 16;
|
||||
this.textBox1.TextChanged += new System.EventHandler(this.textBox1_TextChanged);
|
||||
//
|
||||
// checkBox4
|
||||
//
|
||||
this.checkBox4.AutoSize = true;
|
||||
this.checkBox4.Location = new System.Drawing.Point(807, 76);
|
||||
this.checkBox4.Name = "checkBox4";
|
||||
this.checkBox4.Size = new System.Drawing.Size(79, 22);
|
||||
this.checkBox4.TabIndex = 15;
|
||||
this.checkBox4.Text = "点位4";
|
||||
this.checkBox4.UseVisualStyleBackColor = true;
|
||||
this.checkBox4.CheckedChanged += new System.EventHandler(this.checkBox4_CheckedChanged);
|
||||
//
|
||||
// checkBox3
|
||||
//
|
||||
this.checkBox3.AutoSize = true;
|
||||
this.checkBox3.Location = new System.Drawing.Point(676, 77);
|
||||
this.checkBox3.Name = "checkBox3";
|
||||
this.checkBox3.Size = new System.Drawing.Size(79, 22);
|
||||
this.checkBox3.TabIndex = 14;
|
||||
this.checkBox3.Text = "点位3";
|
||||
this.checkBox3.UseVisualStyleBackColor = true;
|
||||
this.checkBox3.CheckedChanged += new System.EventHandler(this.checkBox3_CheckedChanged);
|
||||
//
|
||||
// checkBox2
|
||||
//
|
||||
this.checkBox2.AutoSize = true;
|
||||
this.checkBox2.Location = new System.Drawing.Point(544, 78);
|
||||
this.checkBox2.Name = "checkBox2";
|
||||
this.checkBox2.Size = new System.Drawing.Size(79, 22);
|
||||
this.checkBox2.TabIndex = 13;
|
||||
this.checkBox2.Text = "点位2";
|
||||
this.checkBox2.UseVisualStyleBackColor = true;
|
||||
this.checkBox2.CheckedChanged += new System.EventHandler(this.checkBox2_CheckedChanged);
|
||||
//
|
||||
// checkBox1
|
||||
//
|
||||
this.checkBox1.AutoSize = true;
|
||||
this.checkBox1.Location = new System.Drawing.Point(422, 79);
|
||||
this.checkBox1.Name = "checkBox1";
|
||||
this.checkBox1.Size = new System.Drawing.Size(79, 22);
|
||||
this.checkBox1.TabIndex = 12;
|
||||
this.checkBox1.Text = "点位1";
|
||||
this.checkBox1.UseVisualStyleBackColor = true;
|
||||
this.checkBox1.CheckedChanged += new System.EventHandler(this.checkBox1_CheckedChanged_1);
|
||||
//
|
||||
// button2
|
||||
//
|
||||
this.button2.Location = new System.Drawing.Point(980, 492);
|
||||
this.button2.Name = "button2";
|
||||
this.button2.Size = new System.Drawing.Size(150, 43);
|
||||
this.button2.TabIndex = 11;
|
||||
this.button2.Text = "开始循环检测";
|
||||
this.button2.UseVisualStyleBackColor = true;
|
||||
this.button2.Click += new System.EventHandler(this.button2_Click_2);
|
||||
//
|
||||
// pictureBox1
|
||||
//
|
||||
this.pictureBox1.Location = new System.Drawing.Point(797, 143);
|
||||
this.pictureBox1.Location = new System.Drawing.Point(797, 156);
|
||||
this.pictureBox1.Name = "pictureBox1";
|
||||
this.pictureBox1.Size = new System.Drawing.Size(333, 300);
|
||||
this.pictureBox1.Size = new System.Drawing.Size(333, 276);
|
||||
this.pictureBox1.TabIndex = 10;
|
||||
this.pictureBox1.TabStop = false;
|
||||
this.pictureBox1.Click += new System.EventHandler(this.pictureBox1_Click);
|
||||
//
|
||||
// button1
|
||||
//
|
||||
this.button1.Location = new System.Drawing.Point(892, 492);
|
||||
this.button1.Location = new System.Drawing.Point(797, 492);
|
||||
this.button1.Name = "button1";
|
||||
this.button1.Size = new System.Drawing.Size(161, 43);
|
||||
this.button1.Size = new System.Drawing.Size(145, 43);
|
||||
this.button1.TabIndex = 9;
|
||||
this.button1.Text = "开始目标检测";
|
||||
this.button1.Text = "检测";
|
||||
this.button1.UseVisualStyleBackColor = true;
|
||||
this.button1.Click += new System.EventHandler(this.button1_Click_2);
|
||||
//
|
||||
@@ -1147,6 +1223,15 @@
|
||||
this.rit_Coord.Text = "";
|
||||
this.rit_Coord.TextChanged += new System.EventHandler(this.rit_Coord_TextChanged);
|
||||
//
|
||||
// label1
|
||||
//
|
||||
this.label1.AutoSize = true;
|
||||
this.label1.Location = new System.Drawing.Point(932, 78);
|
||||
this.label1.Name = "label1";
|
||||
this.label1.Size = new System.Drawing.Size(98, 18);
|
||||
this.label1.TabIndex = 17;
|
||||
this.label1.Text = "停留时间:";
|
||||
//
|
||||
// ShowForm
|
||||
//
|
||||
this.AutoScaleDimensions = new System.Drawing.SizeF(9F, 18F);
|
||||
@@ -1186,6 +1271,7 @@
|
||||
this.tap_Move.ResumeLayout(false);
|
||||
this.tap_Move.PerformLayout();
|
||||
this.tap_Cam.ResumeLayout(false);
|
||||
this.tap_Cam.PerformLayout();
|
||||
((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit();
|
||||
((System.ComponentModel.ISupportInitialize)(this.cam_feed)).EndInit();
|
||||
this.panel1.ResumeLayout(false);
|
||||
@@ -1283,6 +1369,13 @@
|
||||
private System.Windows.Forms.PictureBox cam_feed;
|
||||
private System.Windows.Forms.Button button1;
|
||||
private System.Windows.Forms.PictureBox pictureBox1;
|
||||
private System.Windows.Forms.Button button2;
|
||||
private System.Windows.Forms.CheckBox checkBox4;
|
||||
private System.Windows.Forms.CheckBox checkBox3;
|
||||
private System.Windows.Forms.CheckBox checkBox2;
|
||||
private System.Windows.Forms.CheckBox checkBox1;
|
||||
private System.Windows.Forms.TextBox textBox1;
|
||||
private System.Windows.Forms.Label label1;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -10,6 +10,8 @@ using System.Windows.Forms;
|
||||
using TcpserverExDll;
|
||||
using System.Net;
|
||||
using System.Net.Sockets;
|
||||
using System.Data;
|
||||
using OfficeOpenXml;
|
||||
|
||||
namespace HitBotCSharpDemo
|
||||
{
|
||||
@@ -43,6 +45,7 @@ namespace HitBotCSharpDemo
|
||||
private float[][] cameraPositions;
|
||||
private string filePath = "Cam_pos_path.txt";
|
||||
private string configFilePath = "Camera_config.txt";
|
||||
|
||||
readonly DeviceTLayerType enumTLayerType = DeviceTLayerType.MvGigEDevice | DeviceTLayerType.MvUsbDevice
|
||||
| DeviceTLayerType.MvGenTLGigEDevice | DeviceTLayerType.MvGenTLCXPDevice | DeviceTLayerType.MvGenTLCameraLinkDevice | DeviceTLayerType.MvGenTLXoFDevice;
|
||||
List<IDeviceInfo> deviceInfoList = new List<IDeviceInfo>();
|
||||
@@ -53,6 +56,7 @@ namespace HitBotCSharpDemo
|
||||
private readonly object saveImageLock = new object();
|
||||
private float currentExposure = 10000f; // 默认曝光时间
|
||||
private float currentGain = 0f; // 默认增益
|
||||
|
||||
private TcpClient tcpClient;
|
||||
private NetworkStream networkStream;
|
||||
private Thread detectionThread;
|
||||
@@ -62,6 +66,12 @@ namespace HitBotCSharpDemo
|
||||
private float receivedWidth = 0;
|
||||
private float receivedHeight = 0;
|
||||
|
||||
private bool isCycleRunning = false;
|
||||
private Thread cycleThread;
|
||||
private string xlsFilePath = Path.Combine(Application.StartupPath, "DetectionResults.xlsx");
|
||||
private List<float[]> detectionData = new List<float[]>(); // 存储每轮检测数据
|
||||
private int currentCycle = 0;
|
||||
|
||||
private ControlBeanEx robot;
|
||||
public ShowForm()
|
||||
{
|
||||
@@ -340,6 +350,11 @@ namespace HitBotCSharpDemo
|
||||
}
|
||||
protected override void OnFormClosing(FormClosingEventArgs e)
|
||||
{
|
||||
// 停止循环检测
|
||||
if (isCycleRunning)
|
||||
{
|
||||
StopCycle();
|
||||
}
|
||||
// 停止采集
|
||||
if (isGrabbing)
|
||||
{
|
||||
@@ -367,11 +382,12 @@ namespace HitBotCSharpDemo
|
||||
}
|
||||
}
|
||||
StopDetection();
|
||||
|
||||
// 终结SDK
|
||||
SDKSystem.Finalize();
|
||||
|
||||
base.OnFormClosing(e);
|
||||
}
|
||||
|
||||
private void LoadCameraPositions()
|
||||
{
|
||||
try
|
||||
@@ -1048,12 +1064,14 @@ namespace HitBotCSharpDemo
|
||||
|
||||
// 等待1分钟
|
||||
Thread.Sleep(60000);
|
||||
//File.Delete(imagePath);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
this.Invoke(new Action(() => MessageBox.Show("检测过程出错: " + ex.Message)));
|
||||
break;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
// 保存当前图像
|
||||
@@ -1064,13 +1082,7 @@ namespace HitBotCSharpDemo
|
||||
try
|
||||
{
|
||||
string fileName = "temp_detection_" + DateTime.Now.ToString("yyyyMMddHHmmss") + ".jpg";
|
||||
string detectionFolder = Path.Combine(Application.StartupPath, "OriginalImages");
|
||||
string fullPath = Path.Combine(detectionFolder, fileName);
|
||||
|
||||
if (!Directory.Exists(detectionFolder))
|
||||
{
|
||||
Directory.CreateDirectory(detectionFolder);
|
||||
}
|
||||
string fullPath = Path.Combine(Application.StartupPath, fileName);
|
||||
|
||||
ImageFormatInfo imageFormatInfo = new ImageFormatInfo();
|
||||
imageFormatInfo.FormatType = ImageFormatType.Jpeg;
|
||||
@@ -1150,7 +1162,7 @@ namespace HitBotCSharpDemo
|
||||
Array.Reverse(heightBuffer);
|
||||
receivedHeight = BitConverter.ToSingle(heightBuffer, 0);
|
||||
|
||||
MessageBox.Show($"width:{receivedWidth}, height:{receivedHeight}");
|
||||
//MessageBox.Show($"width:{receivedWidth}, height:{receivedHeight}");
|
||||
|
||||
// 接收图像数据
|
||||
byte[] imageBuffer = new byte[imageSize];
|
||||
@@ -1158,8 +1170,7 @@ namespace HitBotCSharpDemo
|
||||
if (bytesRead != imageSize) throw new Exception("接收图像数据不完整");
|
||||
|
||||
// 保存接收到的图像
|
||||
string startImagePath = Path.Combine(Application.StartupPath, "ReceiveImages");
|
||||
string receivedImagePath = Path.Combine(startImagePath,
|
||||
string receivedImagePath = Path.Combine(Application.StartupPath,
|
||||
"received_detection_" + DateTime.Now.ToString("yyyyMMddHHmmss") + ".jpg");
|
||||
File.WriteAllBytes(receivedImagePath, imageBuffer);
|
||||
|
||||
@@ -1241,5 +1252,293 @@ namespace HitBotCSharpDemo
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
private void button2_Click_2(object sender, EventArgs e)
|
||||
{
|
||||
if (!isCycleRunning)
|
||||
{
|
||||
// 开始循环
|
||||
if (!isInit)
|
||||
{
|
||||
MessageBox.Show("机械臂未初始化");
|
||||
return;
|
||||
}
|
||||
if (cameraPositions == null || cameraPositions.Length < 5)
|
||||
{
|
||||
MessageBox.Show("点位数据未正确加载");
|
||||
return;
|
||||
}
|
||||
// 连接到检测服务器
|
||||
if (!ConnectToServer())
|
||||
{
|
||||
MessageBox.Show("连接检测服务器失败");
|
||||
return;
|
||||
}
|
||||
isCycleRunning = true;
|
||||
cycleThread = new Thread(CycleProcess);
|
||||
cycleThread.IsBackground = true;
|
||||
cycleThread.Start();
|
||||
((Button)sender).Text = "停止循环";
|
||||
MessageBox.Show("循环检测已开始");
|
||||
}
|
||||
else
|
||||
{
|
||||
// 停止循环
|
||||
StopCycle();
|
||||
((Button)sender).Text = "开始循环";
|
||||
MessageBox.Show("循环检测已停止");
|
||||
}
|
||||
}
|
||||
private void CycleProcess()
|
||||
{
|
||||
try
|
||||
{
|
||||
while (isCycleRunning)
|
||||
{
|
||||
float[] cycleResults = new float[8]; // 存储一轮循环的4个点位检测结果
|
||||
|
||||
// 按照1-2-3-4的顺序移动
|
||||
for (int i = 0; i < 4; i++)
|
||||
{
|
||||
if (!isCycleRunning) break;
|
||||
// 移动到指定点位
|
||||
this.Invoke(new Action(() => {
|
||||
MoveToPosition(i);
|
||||
}));
|
||||
// 等待移动完成
|
||||
WaitForRobotStopAndDelay(3000);
|
||||
|
||||
if (!isCycleRunning)
|
||||
{
|
||||
WaitForRobotStop();
|
||||
break;
|
||||
}
|
||||
|
||||
// 拍照并进行检测
|
||||
string detectionResult = CaptureAndDetect(i);
|
||||
|
||||
if (!string.IsNullOrEmpty(detectionResult))
|
||||
{
|
||||
// 在UI线程中显示检测结果
|
||||
this.Invoke(new Action(() => DisplayDetectionResult(detectionResult)));
|
||||
|
||||
// 存储检测到的width和height数据
|
||||
cycleResults[2 * i] = receivedWidth;
|
||||
cycleResults[2 * i + 1] = receivedHeight;
|
||||
}
|
||||
// 在当前点位停留1分钟
|
||||
if (isCycleRunning)
|
||||
{
|
||||
Thread.Sleep(57000); // 已停留3s
|
||||
}
|
||||
}
|
||||
// 保存本轮循环的数据
|
||||
if (isCycleRunning)
|
||||
{
|
||||
detectionData.Add(cycleResults);
|
||||
currentCycle++;
|
||||
|
||||
// 更新Excel文件
|
||||
this.Invoke(new Action(() => UpdateExcelFile()));
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
this.Invoke(new Action(() => MessageBox.Show("循环过程出错: " + ex.Message)));
|
||||
}
|
||||
finally
|
||||
{
|
||||
// 移动到归位点位(第5个点位)
|
||||
if (isInit)
|
||||
{
|
||||
WaitForRobotStop();
|
||||
this.Invoke(new Action(() => {
|
||||
MoveToPosition(4); // 第5个点位(索引4)
|
||||
}));
|
||||
}
|
||||
}
|
||||
}
|
||||
private void WaitForRobotStop()
|
||||
{
|
||||
if (!isInit) return;
|
||||
while (true)
|
||||
{
|
||||
robot.get_scara_param();
|
||||
if (!robot.move_flag) // 机械臂处于静止状态
|
||||
{
|
||||
break;
|
||||
}
|
||||
Thread.Sleep(100); // 每100ms检查一次
|
||||
}
|
||||
}
|
||||
|
||||
private void WaitForRobotStopAndDelay(int additionalDelayMs)
|
||||
{
|
||||
// 先等待机械臂停止运动
|
||||
WaitForRobotStop();
|
||||
|
||||
// 然后额外等待指定时间
|
||||
if (isCycleRunning)
|
||||
{
|
||||
Thread.Sleep(additionalDelayMs);
|
||||
}
|
||||
}
|
||||
|
||||
private string CaptureAndDetect(int positionIndex)
|
||||
{
|
||||
try
|
||||
{
|
||||
// 重置检测结果
|
||||
receivedWidth = 0;
|
||||
receivedHeight = 0;
|
||||
|
||||
// 保存当前图像到对应文件夹
|
||||
string imagePath = SaveImageToPositionFolder(positionIndex);
|
||||
if (string.IsNullOrEmpty(imagePath))
|
||||
{
|
||||
return null;
|
||||
}
|
||||
// 发送图像到服务器进行检测
|
||||
SendImageToServer(imagePath);
|
||||
// 接收处理后的图像
|
||||
string receivedImagePath = ReceiveImageFromServer();
|
||||
|
||||
// 将检测结果图像保存到对应文件夹
|
||||
if (!string.IsNullOrEmpty(receivedImagePath))
|
||||
{
|
||||
string targetFolder = Path.Combine(Application.StartupPath, $"Position{positionIndex + 1}_Results");
|
||||
if (!Directory.Exists(targetFolder))
|
||||
{
|
||||
Directory.CreateDirectory(targetFolder);
|
||||
}
|
||||
string finalPath = Path.Combine(targetFolder,
|
||||
$"Detection_Pos{positionIndex + 1}_Cycle{currentCycle + 1}_{DateTime.Now:yyyyMMddHHmmss}.jpg");
|
||||
|
||||
File.Copy(receivedImagePath, finalPath, true);
|
||||
//File.Delete(receivedImagePath);
|
||||
return finalPath;
|
||||
}
|
||||
return receivedImagePath;
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
this.Invoke(new Action(() => MessageBox.Show($"点位{positionIndex + 1}检测失败: " + ex.Message)));
|
||||
return null;
|
||||
}
|
||||
}
|
||||
private string SaveImageToPositionFolder(int positionIndex)
|
||||
{
|
||||
if (frameForSave == null) return null;
|
||||
try
|
||||
{
|
||||
string positionFolder = Path.Combine(Application.StartupPath, $"Position{positionIndex + 1}_Original");
|
||||
if (!Directory.Exists(positionFolder))
|
||||
{
|
||||
Directory.CreateDirectory(positionFolder);
|
||||
}
|
||||
string fileName = $"Original_Pos{positionIndex + 1}_Cycle{currentCycle + 1}_{DateTime.Now:yyyyMMddHHmmss}.jpg";
|
||||
string fullPath = Path.Combine(positionFolder, fileName);
|
||||
ImageFormatInfo imageFormatInfo = new ImageFormatInfo();
|
||||
imageFormatInfo.FormatType = ImageFormatType.Jpeg;
|
||||
imageFormatInfo.JpegQuality = 90;
|
||||
lock (saveImageLock)
|
||||
{
|
||||
int result = device.ImageSaver.SaveImageToFile(fullPath, frameForSave.Image, imageFormatInfo, CFAMethod.Optimal);
|
||||
if (result == MvError.MV_OK)
|
||||
{
|
||||
return fullPath;
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
MessageBox.Show($"保存点位{positionIndex + 1}图像失败: " + ex.Message);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
private void UpdateExcelFile()
|
||||
{
|
||||
try
|
||||
{
|
||||
ExcelPackage.LicenseContext = LicenseContext.NonCommercial; // 设置EPPlus许可证
|
||||
|
||||
FileInfo file = new FileInfo(xlsFilePath);
|
||||
using (ExcelPackage package = new ExcelPackage(file))
|
||||
{
|
||||
ExcelWorksheet worksheet;
|
||||
|
||||
if (package.Workbook.Worksheets.Count == 0)
|
||||
{
|
||||
// 创建新的工作表
|
||||
worksheet = package.Workbook.Worksheets.Add("检测结果");
|
||||
|
||||
// 设置表头
|
||||
worksheet.Cells[1, 1].Value = "循环次数";
|
||||
worksheet.Cells[1, 2].Value = "pos1_width";
|
||||
worksheet.Cells[1, 3].Value = "pos1_height";
|
||||
worksheet.Cells[1, 4].Value = "pos2_width";
|
||||
worksheet.Cells[1, 5].Value = "pos2_height";
|
||||
worksheet.Cells[1, 6].Value = "pos3_width";
|
||||
worksheet.Cells[1, 7].Value = "pos3_height";
|
||||
worksheet.Cells[1, 8].Value = "pos4_width";
|
||||
worksheet.Cells[1, 9].Value = "pos4_height";
|
||||
}
|
||||
else
|
||||
{
|
||||
worksheet = package.Workbook.Worksheets[0];
|
||||
}
|
||||
// 添加数据行
|
||||
int row = worksheet.Dimension?.Rows + 1 ?? 2;
|
||||
float[] lastCycleData = detectionData[detectionData.Count - 1];
|
||||
|
||||
worksheet.Cells[row, 1].Value = currentCycle;
|
||||
for (int i = 0; i < 8 && i < lastCycleData.Length; i++)
|
||||
{
|
||||
worksheet.Cells[row, i + 2].Value = lastCycleData[i];
|
||||
}
|
||||
package.Save();
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
MessageBox.Show("更新Excel文件失败: " + ex.Message);
|
||||
}
|
||||
}
|
||||
private void StopCycle()
|
||||
{
|
||||
isCycleRunning = false;
|
||||
if (cycleThread != null && cycleThread.IsAlive)
|
||||
{
|
||||
cycleThread.Join(5000); // 等待5秒
|
||||
}
|
||||
// 关闭网络连接
|
||||
StopDetection();
|
||||
}
|
||||
|
||||
private void checkBox1_CheckedChanged_1(object sender, EventArgs e)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
private void checkBox2_CheckedChanged(object sender, EventArgs e)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
private void checkBox3_CheckedChanged(object sender, EventArgs e)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
private void checkBox4_CheckedChanged(object sender, EventArgs e)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
private void textBox1_TextChanged(object sender, EventArgs e)
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
BIN
HitBotCSharpDemo/bin/x64/Debug/DetectionResults.xlsx
Normal file
BIN
HitBotCSharpDemo/bin/x64/Debug/EPPlus.dll
Normal file
49297
HitBotCSharpDemo/bin/x64/Debug/EPPlus.xml
Normal file
@@ -1,6 +1,326 @@
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<configuration>
|
||||
<startup>
|
||||
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.1" />
|
||||
</startup>
|
||||
<startup>
|
||||
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.1" />
|
||||
</startup>
|
||||
<runtime>
|
||||
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.Collections.Concurrent" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-4.0.11.0" newVersion="4.0.11.0" />
|
||||
</dependentAssembly>
|
||||
</assemblyBinding>
|
||||
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.Collections" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-4.0.11.0" newVersion="4.0.11.0" />
|
||||
</dependentAssembly>
|
||||
</assemblyBinding>
|
||||
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.ComponentModel" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-4.0.1.0" newVersion="4.0.1.0" />
|
||||
</dependentAssembly>
|
||||
</assemblyBinding>
|
||||
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.ComponentModel.EventBasedAsync" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-4.0.11.0" newVersion="4.0.11.0" />
|
||||
</dependentAssembly>
|
||||
</assemblyBinding>
|
||||
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.Data.Common" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-4.2.0.0" newVersion="4.2.0.0" />
|
||||
</dependentAssembly>
|
||||
</assemblyBinding>
|
||||
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.Diagnostics.Contracts" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-4.0.1.0" newVersion="4.0.1.0" />
|
||||
</dependentAssembly>
|
||||
</assemblyBinding>
|
||||
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.Diagnostics.Debug" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-4.0.11.0" newVersion="4.0.11.0" />
|
||||
</dependentAssembly>
|
||||
</assemblyBinding>
|
||||
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.Diagnostics.StackTrace" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-4.1.0.0" newVersion="4.1.0.0" />
|
||||
</dependentAssembly>
|
||||
</assemblyBinding>
|
||||
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.Diagnostics.Tools" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-4.0.1.0" newVersion="4.0.1.0" />
|
||||
</dependentAssembly>
|
||||
</assemblyBinding>
|
||||
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.Diagnostics.Tracing" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-4.2.0.0" newVersion="4.2.0.0" />
|
||||
</dependentAssembly>
|
||||
</assemblyBinding>
|
||||
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.Dynamic.Runtime" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-4.0.11.0" newVersion="4.0.11.0" />
|
||||
</dependentAssembly>
|
||||
</assemblyBinding>
|
||||
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.Globalization" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-4.0.11.0" newVersion="4.0.11.0" />
|
||||
</dependentAssembly>
|
||||
</assemblyBinding>
|
||||
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.Globalization.Extensions" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-4.1.0.0" newVersion="4.1.0.0" />
|
||||
</dependentAssembly>
|
||||
</assemblyBinding>
|
||||
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.IO.Compression" publicKeyToken="b77a5c561934e089" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-4.2.0.0" newVersion="4.2.0.0" />
|
||||
</dependentAssembly>
|
||||
</assemblyBinding>
|
||||
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.IO" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-4.1.2.0" newVersion="4.1.2.0" />
|
||||
</dependentAssembly>
|
||||
</assemblyBinding>
|
||||
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.Linq" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-4.1.2.0" newVersion="4.1.2.0" />
|
||||
</dependentAssembly>
|
||||
</assemblyBinding>
|
||||
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.Linq.Expressions" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-4.1.2.0" newVersion="4.1.2.0" />
|
||||
</dependentAssembly>
|
||||
</assemblyBinding>
|
||||
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.Linq.Parallel" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-4.0.1.0" newVersion="4.0.1.0" />
|
||||
</dependentAssembly>
|
||||
</assemblyBinding>
|
||||
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.Linq.Queryable" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-4.0.1.0" newVersion="4.0.1.0" />
|
||||
</dependentAssembly>
|
||||
</assemblyBinding>
|
||||
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.Net.Http" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-4.2.0.0" newVersion="4.2.0.0" />
|
||||
</dependentAssembly>
|
||||
</assemblyBinding>
|
||||
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.Net.NetworkInformation" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-4.1.2.0" newVersion="4.1.2.0" />
|
||||
</dependentAssembly>
|
||||
</assemblyBinding>
|
||||
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.Net.Primitives" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-4.0.11.0" newVersion="4.0.11.0" />
|
||||
</dependentAssembly>
|
||||
</assemblyBinding>
|
||||
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.Net.Requests" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-4.0.11.0" newVersion="4.0.11.0" />
|
||||
</dependentAssembly>
|
||||
</assemblyBinding>
|
||||
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.Net.Sockets" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-4.2.0.0" newVersion="4.2.0.0" />
|
||||
</dependentAssembly>
|
||||
</assemblyBinding>
|
||||
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.ObjectModel" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-4.0.11.0" newVersion="4.0.11.0" />
|
||||
</dependentAssembly>
|
||||
</assemblyBinding>
|
||||
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.Reflection" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-4.1.2.0" newVersion="4.1.2.0" />
|
||||
</dependentAssembly>
|
||||
</assemblyBinding>
|
||||
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.Reflection.Extensions" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-4.0.1.0" newVersion="4.0.1.0" />
|
||||
</dependentAssembly>
|
||||
</assemblyBinding>
|
||||
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.Reflection.Primitives" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-4.0.1.0" newVersion="4.0.1.0" />
|
||||
</dependentAssembly>
|
||||
</assemblyBinding>
|
||||
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.Resources.ResourceManager" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-4.0.1.0" newVersion="4.0.1.0" />
|
||||
</dependentAssembly>
|
||||
</assemblyBinding>
|
||||
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.Runtime" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-4.1.2.0" newVersion="4.1.2.0" />
|
||||
</dependentAssembly>
|
||||
</assemblyBinding>
|
||||
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.Runtime.Extensions" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-4.1.2.0" newVersion="4.1.2.0" />
|
||||
</dependentAssembly>
|
||||
</assemblyBinding>
|
||||
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.Runtime.InteropServices" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-4.1.2.0" newVersion="4.1.2.0" />
|
||||
</dependentAssembly>
|
||||
</assemblyBinding>
|
||||
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.Runtime.InteropServices.RuntimeInformation" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-4.0.2.0" newVersion="4.0.2.0" />
|
||||
</dependentAssembly>
|
||||
</assemblyBinding>
|
||||
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.Runtime.Numerics" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-4.0.1.0" newVersion="4.0.1.0" />
|
||||
</dependentAssembly>
|
||||
</assemblyBinding>
|
||||
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.Runtime.Serialization.Json" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-4.0.1.0" newVersion="4.0.1.0" />
|
||||
</dependentAssembly>
|
||||
</assemblyBinding>
|
||||
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.Runtime.Serialization.Primitives" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-4.2.0.0" newVersion="4.2.0.0" />
|
||||
</dependentAssembly>
|
||||
</assemblyBinding>
|
||||
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.Runtime.Serialization.Xml" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-4.1.3.0" newVersion="4.1.3.0" />
|
||||
</dependentAssembly>
|
||||
</assemblyBinding>
|
||||
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.Security.Cryptography.Algorithms" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-4.3.0.0" newVersion="4.3.0.0" />
|
||||
</dependentAssembly>
|
||||
</assemblyBinding>
|
||||
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.Security.Principal" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-4.0.1.0" newVersion="4.0.1.0" />
|
||||
</dependentAssembly>
|
||||
</assemblyBinding>
|
||||
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.Security.SecureString" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-4.1.0.0" newVersion="4.1.0.0" />
|
||||
</dependentAssembly>
|
||||
</assemblyBinding>
|
||||
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.Text.Encoding" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-4.0.11.0" newVersion="4.0.11.0" />
|
||||
</dependentAssembly>
|
||||
</assemblyBinding>
|
||||
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.Text.Encoding.Extensions" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-4.0.11.0" newVersion="4.0.11.0" />
|
||||
</dependentAssembly>
|
||||
</assemblyBinding>
|
||||
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.Text.RegularExpressions" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-4.1.1.0" newVersion="4.1.1.0" />
|
||||
</dependentAssembly>
|
||||
</assemblyBinding>
|
||||
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.Threading" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-4.0.11.0" newVersion="4.0.11.0" />
|
||||
</dependentAssembly>
|
||||
</assemblyBinding>
|
||||
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.Threading.Overlapped" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-4.1.0.0" newVersion="4.1.0.0" />
|
||||
</dependentAssembly>
|
||||
</assemblyBinding>
|
||||
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.Threading.Tasks" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-4.0.11.0" newVersion="4.0.11.0" />
|
||||
</dependentAssembly>
|
||||
</assemblyBinding>
|
||||
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.Threading.Tasks.Parallel" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-4.0.1.0" newVersion="4.0.1.0" />
|
||||
</dependentAssembly>
|
||||
</assemblyBinding>
|
||||
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.Threading.Timer" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-4.0.1.0" newVersion="4.0.1.0" />
|
||||
</dependentAssembly>
|
||||
</assemblyBinding>
|
||||
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.ValueTuple" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-4.0.2.0" newVersion="4.0.2.0" />
|
||||
</dependentAssembly>
|
||||
</assemblyBinding>
|
||||
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.Xml.ReaderWriter" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-4.1.1.0" newVersion="4.1.1.0" />
|
||||
</dependentAssembly>
|
||||
</assemblyBinding>
|
||||
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.Xml.XDocument" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-4.0.11.0" newVersion="4.0.11.0" />
|
||||
</dependentAssembly>
|
||||
</assemblyBinding>
|
||||
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.Xml.XmlSerializer" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-4.0.11.0" newVersion="4.0.11.0" />
|
||||
</dependentAssembly>
|
||||
</assemblyBinding>
|
||||
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.Xml.XPath.XDocument" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-4.1.0.0" newVersion="4.1.0.0" />
|
||||
</dependentAssembly>
|
||||
</assemblyBinding>
|
||||
</runtime>
|
||||
</configuration>
|
||||
BIN
HitBotCSharpDemo/bin/x64/Debug/Microsoft.Win32.Primitives.dll
Normal file
|
Before Width: | Height: | Size: 749 KiB |
|
Before Width: | Height: | Size: 752 KiB |
|
Before Width: | Height: | Size: 765 KiB |
|
Before Width: | Height: | Size: 673 KiB |
|
After Width: | Height: | Size: 749 KiB |
|
After Width: | Height: | Size: 748 KiB |
|
After Width: | Height: | Size: 727 KiB |
|
After Width: | Height: | Size: 726 KiB |
|
After Width: | Height: | Size: 739 KiB |
|
After Width: | Height: | Size: 739 KiB |
|
After Width: | Height: | Size: 738 KiB |
|
After Width: | Height: | Size: 749 KiB |
|
After Width: | Height: | Size: 748 KiB |
|
After Width: | Height: | Size: 723 KiB |
|
After Width: | Height: | Size: 731 KiB |
|
After Width: | Height: | Size: 738 KiB |
|
After Width: | Height: | Size: 728 KiB |
|
After Width: | Height: | Size: 732 KiB |
|
After Width: | Height: | Size: 512 KiB |
|
After Width: | Height: | Size: 512 KiB |
|
After Width: | Height: | Size: 496 KiB |
|
After Width: | Height: | Size: 496 KiB |
|
After Width: | Height: | Size: 504 KiB |
|
After Width: | Height: | Size: 505 KiB |
|
After Width: | Height: | Size: 504 KiB |
|
After Width: | Height: | Size: 512 KiB |
|
After Width: | Height: | Size: 512 KiB |
|
After Width: | Height: | Size: 493 KiB |
|
After Width: | Height: | Size: 498 KiB |
|
After Width: | Height: | Size: 504 KiB |
|
After Width: | Height: | Size: 497 KiB |
|
After Width: | Height: | Size: 499 KiB |
|
After Width: | Height: | Size: 748 KiB |
|
After Width: | Height: | Size: 752 KiB |
|
After Width: | Height: | Size: 752 KiB |
|
After Width: | Height: | Size: 728 KiB |
|
After Width: | Height: | Size: 732 KiB |
|
After Width: | Height: | Size: 743 KiB |
|
After Width: | Height: | Size: 742 KiB |
|
After Width: | Height: | Size: 730 KiB |
|
After Width: | Height: | Size: 733 KiB |
|
After Width: | Height: | Size: 731 KiB |
|
After Width: | Height: | Size: 735 KiB |
|
After Width: | Height: | Size: 508 KiB |
|
After Width: | Height: | Size: 511 KiB |
|
After Width: | Height: | Size: 511 KiB |
|
After Width: | Height: | Size: 495 KiB |
|
After Width: | Height: | Size: 498 KiB |
|
After Width: | Height: | Size: 506 KiB |
|
After Width: | Height: | Size: 506 KiB |
|
After Width: | Height: | Size: 496 KiB |
|
After Width: | Height: | Size: 499 KiB |
|
After Width: | Height: | Size: 497 KiB |
|
After Width: | Height: | Size: 500 KiB |
|
After Width: | Height: | Size: 761 KiB |
|
After Width: | Height: | Size: 764 KiB |
|
After Width: | Height: | Size: 764 KiB |
|
After Width: | Height: | Size: 742 KiB |
|
After Width: | Height: | Size: 746 KiB |
|
After Width: | Height: | Size: 755 KiB |
|
After Width: | Height: | Size: 743 KiB |
|
After Width: | Height: | Size: 747 KiB |
|
After Width: | Height: | Size: 748 KiB |
|
After Width: | Height: | Size: 517 KiB |
|
After Width: | Height: | Size: 519 KiB |
|
After Width: | Height: | Size: 519 KiB |
|
After Width: | Height: | Size: 503 KiB |
|
After Width: | Height: | Size: 507 KiB |
|
After Width: | Height: | Size: 513 KiB |
|
After Width: | Height: | Size: 504 KiB |
|
After Width: | Height: | Size: 508 KiB |
|
After Width: | Height: | Size: 509 KiB |
|
After Width: | Height: | Size: 670 KiB |
|
After Width: | Height: | Size: 672 KiB |
|
After Width: | Height: | Size: 672 KiB |
|
After Width: | Height: | Size: 662 KiB |
|
After Width: | Height: | Size: 663 KiB |
|
After Width: | Height: | Size: 665 KiB |
|
After Width: | Height: | Size: 662 KiB |
|
After Width: | Height: | Size: 664 KiB |
|
After Width: | Height: | Size: 447 KiB |
|
After Width: | Height: | Size: 448 KiB |
|
After Width: | Height: | Size: 448 KiB |
|
After Width: | Height: | Size: 444 KiB |
|
After Width: | Height: | Size: 446 KiB |
|
After Width: | Height: | Size: 447 KiB |
|
After Width: | Height: | Size: 445 KiB |
|
After Width: | Height: | Size: 446 KiB |
|
Before Width: | Height: | Size: 512 KiB |