C# 有没有办法以无响应的形式捕获keydown事件

C# 有没有办法以无响应的形式捕获keydown事件,c#,winforms,C#,Winforms,我有一个表单,其中运行着一个耗时的方法。我想在该方法运行时用按键取消该方法,但是由于某些限制,我无法将该方法转换为任务或任何异步方法 场景是,用户按下一个按钮,按钮调用该方法(假设它运行了一段时间(x>y)),这需要一些时间,如果用户按下esc键,我想中断该方法 如何捕获无响应表单的按键?由于while方法阻止表单,表单的按键方法没有响应。您可以尝试从耗时的方法调用应用程序。DoEvents,但这也会处理各种消息,包括尝试关闭表单等危险消息 如果您可以重新编写代码并将长期运行的方法放在Backg

我有一个表单,其中运行着一个耗时的方法。我想在该方法运行时用按键取消该方法,但是由于某些限制,我无法将该方法转换为任务或任何异步方法

场景是,用户按下一个按钮,按钮调用该方法(假设它运行了一段时间(x>y)),这需要一些时间,如果用户按下esc键,我想中断该方法


如何捕获无响应表单的按键?由于while方法阻止表单,表单的按键方法没有响应。

您可以尝试从耗时的方法调用
应用程序。DoEvents
,但这也会处理各种消息,包括尝试关闭表单等危险消息


如果您可以重新编写代码并将长期运行的方法放在
BackgroundWorker
中,效果会更好

正如您所说,它没有响应,无法捕获输入。
相反,您可以实现一个后台线程在那里执行您的工作,这样您就可以根据需要取消线程

如果它没有响应,那么您就不能。为什么异步仅限于您?你可以使用后台工作程序吗?有没有一种方法可以以无响应的形式捕获keydown事件No。。。如果您阻塞了主线程,那么就不会处理更多的消息。您最好了解如何解决“无法将该方法转换为任务或任何异步方法”的问题。为什么不能呢?当然,将所有内容重构为异步也可以,但项目范围不允许这样做。时间是这里的问题,您需要使用表单的实例。等待按键的循环必须轮询状态位,以便在取消时退出。然后,cancel方法必须设置cancel位。