You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
100 lines
2.3 KiB
C#
100 lines
2.3 KiB
C#
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<DOperateEntity> _methodQueue;
|
|
|
|
private CancellationTokenSource sendCancellationTokenSource;
|
|
|
|
|
|
|
|
/// <summary>
|
|
/// 输出端口操作
|
|
/// </summary>
|
|
private DOperate DOperateInfo;
|
|
|
|
public DengTool()
|
|
{
|
|
|
|
DOperateInfo = new DOperate();
|
|
_methodQueue =new Queue<DOperateEntity>();
|
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
/// RFID刷新任务
|
|
/// </summary>
|
|
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();
|
|
}
|
|
}
|
|
}
|