C# 使用keydown启动线程,并通过释放(keyup)停止线程?
所以我试着用键事件来操作线程,我设法通过点击键E和键R(两个线程)来启动它们,但我不能通过重新设置键来阻止它们,因为某些原因,键启动事件不起作用。。。 (启动、停止后,我希望在需要时重新启动它们…因此没有计时器…) C#WINDOWS应用程序代码:(我正在使用的方法) ((方法是这样的?:C# 使用keydown启动线程,并通过释放(keyup)停止线程?,c#,multithreading,winforms,events,keydown,C#,Multithreading,Winforms,Events,Keydown,所以我试着用键事件来操作线程,我设法通过点击键E和键R(两个线程)来启动它们,但我不能通过重新设置键来阻止它们,因为某些原因,键启动事件不起作用。。。 (启动、停止后,我希望在需要时重新启动它们…因此没有计时器…) C#WINDOWS应用程序代码:(我正在使用的方法) ((方法是这样的?: private void Yawspeed_KeyUp(object sender, KeyEventArgs e) { if (e.KeyCode == Keys.E) { yaw
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\u加载(对象发送方,事件参数e)
{
}
#区域线程函数
///
///此线程将移动光标
///
公共静态无效YawspeedRightThread()
{
while(true)
…(其余代码、线程本身、函数…首先,您不能重新启动线程。如果启动线程,线程将完成,然后您再次尝试启动同一个线程对象,它将引发异常,告诉您这是不可能的。您应该改为使用 现在假设您将忽略上述内容,并尝试这样做。需要检查的两件事是:
最后,确保没有调用key up。我之所以这么说,是因为Thread.Abort()实际上不能保证结束线程的执行。它只是在线程中抛出一个异常。这意味着如果您在线程的函数中添加了一个捕获“异常”的try catch对象时,try-catch将捕获中止强制进入的异常,并允许线程继续执行。这是不建议中止的原因之一,并且鼓励人们使用其他机制来结束线程,例如触发布尔值。您能更清楚地描述您打算做什么吗?这似乎有些奇怪帽子不寻常…您已经问了这个问题。看起来您删除了上一个问题,也销毁了SO用户添加的评论。这对任何人都没有帮助,请不要这样做。Control.KeyUp事件“在控件具有焦点时释放键时发生”。它仍然具有焦点吗?
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)