我的控制台应用程序正在执行一个完全用于用户界面的线程,它在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.
祝你好运.