using NDSD_TouchSocket; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading; using System.Threading.Tasks; namespace NDSD_Screwdriver.Tool { public class DengTool { private Queue _methodQueue; private CancellationTokenSource sendCancellationTokenSource; /// /// 输出端口操作 /// private DOperate DOperateInfo; public DengTool() { DOperateInfo = new DOperate(); _methodQueue =new Queue(); } /// /// RFID刷新任务 /// private void SendRunningTask() { sendCancellationTokenSource = new CancellationTokenSource(); Task.Run(() => { while (!sendCancellationTokenSource.Token.IsCancellationRequested) { while (_methodQueue.Count > 0) { var q = _methodQueue.Dequeue(); // -1 DClose > 0 DTimeOpen =0 Dopen if (q.delay == -1) { DOperateInfo.DClose(q.port); } if (q.delay == 0) { DOperateInfo.DOpen(q.port); } if (q.delay > 0) { DOperateInfo.DTimeOpen(q.port, q.delay); } Thread.Sleep(210); // 模拟一些长时间的工作 } Thread.Sleep(100); // 模拟一些长时间的工作 } }, sendCancellationTokenSource.Token); } public void AddMq(DOperateEntity entity) { _methodQueue.Enqueue(entity); } public void Stop() { _methodQueue.Clear(); sendCancellationTokenSource.Cancel(); } public void Start() { SendRunningTask(); } public void Restart() { Stop(); Thread.Sleep(200); Start(); } } }