c# – 如何在.NET中中止另一个线程,当所述线程正在执行Console.ReadLine?

前端之家收集整理的这篇文章主要介绍了c# – 如何在.NET中中止另一个线程,当所述线程正在执行Console.ReadLine?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我的控制台应用程序正在执行一个完全用于用户界面的线程,它在Console.ReadLine()上花费了大量的时间阻止(这个调用花费在 Windows的大部分时间内,在.NET的控制之外)框架).

我需要中止这个线程.但是,以下代码似乎不起作用:

this.UserInterfaceThread.Abort();

有任何想法吗? Thread.Interrupt()有什么用吗?

更新

正如汉斯·帕斯特(Hans Passant)指出的那样:

The CLR imposes rather sane rules on the state of a thread when it aborts it. The perils of Thread.Abort() are well known,what certainly cannot ever work reliably is aborting a thread that’s executing unmanaged code. Which is the case when you call Console.ReadLine(),the thread is buried deep inside Windows operating system code.

解决方案是简单地将[enter]按键插入当前正在运行的控制台应用程序,该应用程序会解除对Console.ReadLine()的阻塞,因此线程将立即中止.

我们不能使用SendKeys,因为这是特定于Windows窗体,它还要求当前窗口具有焦点.

解决方案是使用打包Windows SendInput()调用inputsimulator.codeplex.com的库.

参见示例代码

.NET call to send [enter] keystroke into the current process,which is a console app?

解决方法

使用SendKeys并模拟ENTER键.获得帮助 here.

祝你好运.

猜你在找的C#相关文章