Мое консольное приложение выполняет поток, полностью посвященный пользовательскому интерфейсу, он тратит много времени на Console.ReadLine()
(этот вызов проводит свое время глубоко в недрах Windows, вне контроля. NET).
Мне нужно прервать этот поток. Однако следующий код не работает:
this.UserInterfaceThread.Abort();
Любые идеи? Будет ли Thread.Interrupt() использоваться?
Обновление
Как указал Ханс Пассант:
CLR налагает довольно правильные правила на состояние потока, когда он прерывает его. Опасности Thread.Abort() хорошо известны, что, безусловно, никогда не может работать надежно, прерывает поток, выполняющий неуправляемый код. В этом случае, когда вы вызываете Console.ReadLine(), поток зарывается глубоко внутри кода операционной системы Windows.
Решение состоит в простое нажатие клавиши [enter] в текущее консольное приложение, которое блокирует Console.ReadLine(), поэтому поток немедленно прерывается.
Мы не можем использовать SendKeys, поскольку это специфично для оконных форм, а также для того, чтобы текущее окно имело фокус.
Решение состоит в использовании библиотеки inputsimulator.codeplex.com, которая завершает вызов Windows SendInput().
См. пример кода: