У меня есть консольная программа, которая имеет разные компоненты, которые работают следующим образом:
void start() {
while(true){
DoSomething();
Thread.Sleep(1000*5);
}
}
Моя основная точка входа выглядит как [псевдо-йэш-код]
Thread.Start(Componenet1.Start);
Thread.Start(Componenet2.Start);
while(true){
Console.Writeline("running");
Thread.Sleep(1000*5);
}
Консоли отсутствуют. Где угодно. Моя проблема - ИНОГДА, приложение будет работать отлично, но затем остановится, и если я нажму любую клавишу в окне, он снова начнет работать. Это происходит довольно редко, но у меня есть эта программа, развернутая на 100+ виртуальных машинах, работающих круглосуточно в автоматизированной среде.
Также на компьютере у меня есть некоторые скрипты AHK и другие вещи, которые манипулируют мышью, но не уверены, что это имеет к этому какое-то отношение.
Также обратите внимание, что иногда процессор может действительно работать на 100% на машинах, поэтому, возможно, приоритет потока является проблемой?
РЕШЕНИЕ: вам нужно отключить режим быстрого редактирования. Здесь используется код С# для этого:
// http://msdn.microsoft.com/en-us/library/ms686033(VS.85).aspx
[DllImport("kernel32.dll")]
public static extern bool SetConsoleMode(IntPtr hConsoleHandle, uint dwMode);
private const uint ENABLE_EXTENDED_FLAGS = 0x0080;
static void Main(string[] args)
{
IntPtr handle = Process.GetCurrentProcess().MainWindowHandle;
SetConsoleMode(handle, ENABLE_EXTENDED_FLAGS);