用了wince的sdk
这是我用一个新建的线程绑定的方法
public void sendInvoke()
{
//外循环,实现变角
for (j = 0; j < cul_time1 + 1 && !stop; )
{
//内循环,实现步进
for (i = 0; i < cul_time2 - 1 && !stop; i++)
{
if (SWITCH == 1 && !stop)
{
sp.SendData(bytSendArray);//发送数据
} System.Threading.Thread.Sleep((int)(timer_time1 * 1000)); if (SWITCH == 1 && !stop)//步进后拍摄
{
DeviceIoControl(leddriver, LED_ON, IntPtr.Zero, 0, IntPtr.Zero, 0, IntPtr.Zero, IntPtr.Zero);
System.Threading.Thread.Sleep(400);
DeviceIoControl(leddriver, LED_OFF, IntPtr.Zero, 0, IntPtr.Zero, 0, IntPtr.Zero, IntPtr.Zero);
}
System.Threading.Thread.Sleep(555);
}
j++;
System.Threading.Thread.Sleep(555);
timer_time2 = cul_time2 * first_cal_level * 0.5;//内循环次数X单位时间X相对步幅 if (SWITCH == 1 && !stop)
{
sp.SendData(initiBytSendArray);//归位
}
System.Threading.Thread.Sleep((int)timer_time2); //变角后拍摄
if (!stop && SWITCH == 1 && ((i != cul_time2 - 1 && j != cul_time1 + 1) || (i == cul_time2 - 1 && j != cul_time1 + 1)))
{
sp.SendData(verticalBytSendArray);//发送数据
} System.Threading.Thread.Sleep((int)(timer_time1 * 1000)); if (!stop && SWITCH == 1 && ((i != cul_time2 - 1 && j != cul_time1 + 1) || (i == cul_time2 - 1 && j != cul_time1 + 1)))
{
DeviceIoControl(leddriver, LED_ON, IntPtr.Zero, 0, IntPtr.Zero, 0, IntPtr.Zero, IntPtr.Zero);
System.Threading.Thread.Sleep(400);
DeviceIoControl(leddriver, LED_OFF, IntPtr.Zero, 0, IntPtr.Zero, 0, IntPtr.Zero, IntPtr.Zero);
}
System.Threading.Thread.Sleep(555);
}
}
如上所示,当stop变量变为true时这个方法就终止了,但问题也来了,中止后我再次启动它,具体说就是在另一个按钮事件里newthread.start(),会出现另一个线程,而上次中止的线程也在活动,而这时候就会互相干扰,当然现象就是LED灯不断的亮,发码乱套了(停一次再开始是有两个线程了,停两次就会有三个)现在我想能不能在停止事件里把这个线程给撤销,可是wince里一直没试出怎么实现,求解决办法
这是我用一个新建的线程绑定的方法
public void sendInvoke()
{
//外循环,实现变角
for (j = 0; j < cul_time1 + 1 && !stop; )
{
//内循环,实现步进
for (i = 0; i < cul_time2 - 1 && !stop; i++)
{
if (SWITCH == 1 && !stop)
{
sp.SendData(bytSendArray);//发送数据
} System.Threading.Thread.Sleep((int)(timer_time1 * 1000)); if (SWITCH == 1 && !stop)//步进后拍摄
{
DeviceIoControl(leddriver, LED_ON, IntPtr.Zero, 0, IntPtr.Zero, 0, IntPtr.Zero, IntPtr.Zero);
System.Threading.Thread.Sleep(400);
DeviceIoControl(leddriver, LED_OFF, IntPtr.Zero, 0, IntPtr.Zero, 0, IntPtr.Zero, IntPtr.Zero);
}
System.Threading.Thread.Sleep(555);
}
j++;
System.Threading.Thread.Sleep(555);
timer_time2 = cul_time2 * first_cal_level * 0.5;//内循环次数X单位时间X相对步幅 if (SWITCH == 1 && !stop)
{
sp.SendData(initiBytSendArray);//归位
}
System.Threading.Thread.Sleep((int)timer_time2); //变角后拍摄
if (!stop && SWITCH == 1 && ((i != cul_time2 - 1 && j != cul_time1 + 1) || (i == cul_time2 - 1 && j != cul_time1 + 1)))
{
sp.SendData(verticalBytSendArray);//发送数据
} System.Threading.Thread.Sleep((int)(timer_time1 * 1000)); if (!stop && SWITCH == 1 && ((i != cul_time2 - 1 && j != cul_time1 + 1) || (i == cul_time2 - 1 && j != cul_time1 + 1)))
{
DeviceIoControl(leddriver, LED_ON, IntPtr.Zero, 0, IntPtr.Zero, 0, IntPtr.Zero, IntPtr.Zero);
System.Threading.Thread.Sleep(400);
DeviceIoControl(leddriver, LED_OFF, IntPtr.Zero, 0, IntPtr.Zero, 0, IntPtr.Zero, IntPtr.Zero);
}
System.Threading.Thread.Sleep(555);
}
}
如上所示,当stop变量变为true时这个方法就终止了,但问题也来了,中止后我再次启动它,具体说就是在另一个按钮事件里newthread.start(),会出现另一个线程,而上次中止的线程也在活动,而这时候就会互相干扰,当然现象就是LED灯不断的亮,发码乱套了(停一次再开始是有两个线程了,停两次就会有三个)现在我想能不能在停止事件里把这个线程给撤销,可是wince里一直没试出怎么实现,求解决办法
怎么在c#上用TerminateThread()呢,强制弄掉算了