|
- using System;
- using System.Collections.Generic;
- using System.Data;
- using System.Diagnostics;
- using System.Drawing;
- using System.Drawing.Imaging;
- using System.IO;
- using System.Linq;
- using System.Reflection;
- using System.Runtime.InteropServices;
- using System.Threading;
- using LeatherApp.Utils;
- using Models;
- using OpenCvSharp;
- using OpenCvSharp.Extensions;
-
- namespace LeatherApp.Device
- {
- public class PhotoLib : IDisposable
- {
- public Action<int> QueueCountEvent;//0/1/2, 数量
- public Action<DateTime,WarningEnum, string> WarningEvent;
- /// <summary>
- /// 结果
- /// </summary>
- public Action<PhotoTask> finishEvent;
- /// <summary>
- /// 是否打开设备成功
- /// </summary>
- public bool IsInit { get; private set; } = false;
-
- private Thread t_task1;
- private List<PhotoTask> lstTask1 = new List<PhotoTask>();
-
- //private Thread t_task2;
- //private List<DefectTask> lstTask2 = new List<DefectTask>();
- public PhotoLib()
- {
- }
- public bool start()
- {
- try
- {
- IsInit = true;
- lstTask1.Clear();
-
- t_task1 = new System.Threading.Thread(run1);
- t_task1.IsBackground = true;
- t_task1.Start();
-
- //t_task_operation = new System.Threading.Thread(run2);
- //t_task_operation.IsBackground = true;
- //t_task_operation.Start();
-
- return true;
- }
- catch (Exception ex)
- {
- WarningEvent?.Invoke(DateTime.Now,WarningEnum.High, ex.Message);
- return false;
- }
- }
- public void stop()
- {
- if (!IsInit) return;
-
- try
- {
- IsInit = false;
- //timer.Elapsed -= Timer_Elapsed;
- if (t_task1 != null)
- {
- bool b = t_task1.Join(5000);
- if (!b) t_task1.Abort();
- t_task1 = null;
- }
-
- //if (t_task_operation != null)
- //{
- // bool b = t_task_operation.Join(5000);
- // if (!b) t_task_operation.Abort();
- // t_task_operation = null;
- //}
- lstTask1.Clear();
- //lstTask2.Clear();
- }
- catch { }
- }
-
- //推理+打标
- private void run1()
- {
- while (IsInit)
- {
- if (lstTask1.Count < 1)
- {
- Thread.Sleep(0);
- continue;
- }
-
- //
- var task = pop();
- //try
- //{
- if (task != null)
- {
- task.finishEvent(task);
- }
- //}
- //catch (Exception ex)
- //{
- // WarningEvent?.Invoke(DateTime.Now,WarningEnum.Low, $"DefectLib task2 err({liStep}):" + ex.Message);
- // task.isSucceed = false;
- // task.resultInfo = ex.Message;
- // callback(task);
- //}
- }
- }
- private void callback(PhotoTask task)
- {
- //返回成功/失败,异步调用
- if (task.finishEvent != null || (task.finishEvent = finishEvent) != null)
- //task.finishEvent.BeginInvoke(result, errInfo, res => task.finishEvent.EndInvoke(res), null);
- System.Threading.ThreadPool.QueueUserWorkItem(waitCallback, task);
- }
- //异步回调
- WaitCallback waitCallback = new WaitCallback(o =>
- {
- var task = (PhotoTask)o;
- task.finishEvent(task);
- });
-
- public class PhotoTask
- {
- public Records record;
- public object scanPhotos0;
- public object scanPhotos1;
-
-
- //
- /// <summary>
- /// 完成后回调
- /// </summary>
- public Action<PhotoTask> finishEvent;
- //==结果返回
- //public bool isSucceed;//转换是否成功
- //public string resultInfo = "";//成功或失败信息
-
- //public long[] stopwatch = new long[5];
- }
-
- public void add(PhotoTask task)
- {
- lock (lstTask1)
- {
- lstTask1.Add(task);
- QueueCountEvent?.BeginInvoke(lstTask1.Count, null, null);
- }
- }
-
-
- private PhotoTask pop()
- {
- lock (lstTask1)
- {
- if (lstTask1.Count < 1)
- return null;
-
- var task = lstTask1[0];
- lstTask1.RemoveAt(0);
- QueueCountEvent?.BeginInvoke(lstTask1.Count, null, null);
- return task;
- }
- }
-
-
- public void Dispose()
- {
- stop();
- }
- }
- }
|