来,着代码
struct MyStart_StopButton
{
public int signal01, signal02;
}
public class Buttons
{
MyControllSignalController Controller=new MyControllSignalController();//获取信号控制器的类
string CurrentButton = "", LateButton = "";//记录当前按下按钮 记录上个按钮
string[] MyButtons = {"开始","停止" };//存入按钮数据
Thread StartListenTwoButtonDown;//检测按钮状态的线程
bool TwoButtonIsDown=false;//外部获取的变量
bool ButtonReady = false;//按钮是否第一次被按下?
DateTime LateTime;//上一次时间
public bool GetTwoButtonSts() //由此获取两个按钮的状态
{
return TwoButtonIsDown;
}
public void StartListen_TwoButton(int signal01, int signal02)
{
MyStart_StopButton OwnSignal;//定义线程多参传递结构体
OwnSignal.signal01 = signal01;//获取信号1
OwnSignal.signal02 = signal02;//获取信号2
StartListenTwoButtonDown = new Thread(new ParameterizedThreadStart(ButtonDown));
StartListenTwoButtonDown.Start(OwnSignal);//开启线程
}
public void StopListen_TwoButton()
{
StartListenTwoButtonDown.Abort();
}
void ButtonDown(object ob)
{
MyStart_StopButton OwnSignal = (MyStart_StopButton)ob;//转换传递过来的参数
while (true)
{
if (Controller.Read(OwnSignal.signal01) || Controller.Read(OwnSignal.signal02))//接收信号
{
if (Controller.Read(OwnSignal.signal01))
{
CurrentButton = MyButtons[0];//记录当前按钮
}
else if (Controller.Read(OwnSignal.signal02))
{
CurrentButton = MyButtons[1];//记录当前按钮
}
if (CurrentButton != LateButton)//重复按下无效
{
if (ButtonReady)//之前是否点击过其他按钮
{
if (DateTime.Now.Second - LateTime.Second <= 3f)//时间差
{
TwoButtonIsDown = true;
}
ButtonReady = false;//消去状态
}
else//第一次点击
{
ButtonReady = true;//状态更新
LateTime = DateTime.Now;//记录点击时间
TwoButtonIsDown = false;
}
}
}
if (Controller.Read(OwnSignal.signal01))
{
LateButton = MyButtons[0];//记录上一个按钮
}
else if (Controller.Read(OwnSignal.signal02))
{
LateButton = MyButtons[1];//记录上一个按钮
}
}
}
}