所以我试图用关键事件操作线程,我设法通过按键E和R(两个线程)开始,但我不能通过重新发布键来阻止它们,键盘事件由于某种原因不起作用.. 。 (开始后,停止我想在需要时重启它们......所以没有计时器......)
C#WINDOWS APPLICATION代码:(我正在使用的方法)
private void Yawspeed_KeyDown(object sender, KeyEventArgs e)
{
Thread yawspeedRightThread = new Thread(new ThreadStart(YawspeedRightThread));
Thread yawspeedLeftThread = new Thread(new ThreadStart(YawspeedLeftThread));
if (e.KeyCode == Keys.E)
{
yawspeedRightThread.Start();
}
if (e.KeyCode == Keys.R)
{
yawspeedLeftThread.Start();
}
}
((方法会是这样的吗?:
private void Yawspeed_KeyUp(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.E)
{
yawspeedRightThread.Abort();
}
if (e.KeyCode == Keys.R)
{
yawspeedLeftThread.Abort();
}
}
(结束...)
private void Yawspeed_Load(object sender, EventArgs e)
{
}
#region Thread Functions
/// <summary>
/// This thread will move your cursor
/// </summary>
public static void YawspeedRightThread()
{
while (true)
...(其余代码,线程本身,函数......)
答案 0 :(得分:0)
首先,您无法重新启动线程。如果你启动一个线程,线程结束,然后你尝试再次启动同一个线程对象,它会抛出一个异常,告诉你这是不可能的。您应该考虑使用Thread Pool代替。
现在假设您将忽略上述内容并尝试执行此操作。要检查的两件事是:
最后,确保实际上没有调用密钥。我这说的原因是Thread.Abort()实际上并不能保证结束线程的执行。它只是在线程中抛出一个异常。这意味着如果你做了类似的事情,在线程的函数中添加了一个捕获“异常”对象的try catch,try catch将捕获Abort强制进入它并允许线程继续执行的异常。这个事实是不推荐Abort的一个原因,鼓励人们使用其他机制来结束一个线程,比如跳过布尔值。