私のコンソールアプリケーションは、完全にユーザーインターフェイス専用のスレッドを実行しています.(この呼び出しは.NETフレームワークの制御の外にあるWindowsの内部に深い時間を費やしています) 。上記のスレッドがConsole.ReadLineを実行しているときに、.NETで別のスレッドを中止する方法
このスレッドを中止する必要があります。しかし、次のコードは動作していないようです:
this.UserInterfaceThread.Abort();
アイデアはありますか? Thread.Interrupt()はどんな使い方ですか?
更新
ハンスアンパッサンは指摘したように:それを中断するとき
CLRは、スレッドの状態ではなく健全ルールを課します。 Thread.Abort()の危険性はよく知られていますが、確かに確実に動作しないものは、アンマネージコードを実行しているスレッドを中止することです。 Console.ReadLine()を呼び出すと、スレッドはWindowsオペレーティングシステムのコードの内部に埋め込まれます。
解決策は、現在実行中のコンソールアプリケーションに[enter]キーストロークを押し込むだけで、Console.ReadLine()をブロック解除するので、スレッドはすぐに中止されます。
can notこれはWindowsフォームに固有のもので、現在のウィンドウにフォーカスを当てる必要があるため、SendKeysを使用します。
解決策は、Windows SendInput()呼び出しをラップするinputsimulator.codeplex.comのライブラリを使用することです。
参照サンプルコード:
.NET call to send [enter] keystroke into the current process, which is a console app?
[Console.ReadLine()にタイムアウトを追加する方法?](http://stackoverflow.com/questions/57615/how-to-add-a-timeout-to-console-readline) –
'Thread.Abort' [悪です](http://www.interact-sw.co.uk/iangblog/2004/11/12/cancellation)。 – spender
@ダリン・ディミトロフ:その複製ではありません。この質問は、Console.ReadLine()の単一のインスタンスを実行しているスレッドを中断する方法を扱います。 – Contango