Mam program konsoli, która ma różne składniki, które działają tak:Console Application Okna utknięcie (Needs wciśnięcie klawisza)
void start() {
while(true){
DoSomething();
Thread.Sleep(1000*5);
}
}
Moim głównym punktem wejścia wygląda [pseudo-owski kod]
Thread.Start(Componenet1.Start);
Thread.Start(Componenet2.Start);
while(true){
Console.Writeline("running");
Thread.Sleep(1000*5);
}
Brak konsoli. Czyta gdziekolwiek. Mój problem jest CZASEM, że aplikacja będzie działała świetnie, ale potem przestanie i jeśli wciśniesz dowolny klawisz w oknie, zacznie działać. Zdarza się to dość rzadko, ale mam ten program wdrożony na ponad 100 maszynach wirtualnych działających 24/7 w zautomatyzowanym środowisku.
Również na komputerze mam kilka skryptów AHK i innych rzeczy, które manipulują myszą, ale nie wiem, czy to ma z tym coś wspólnego.
Należy również pamiętać, że czasami procesor naprawdę działa na 100% na komputerach, więc może priorytet wątku jest problemem?
ROZWIĄZANIE: Musisz wyłączyć tryb szybkiej edycji. Tutaj działa kod C# to zrobić:
// 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);
spróbuj skomentować 'DoSomething();' i zobacz, czy zachowuje się tak samo – Andrey
Odpowiedź w kodzie C# nie działa. Poniższa przyjęta odpowiedź brzmi. – liang
Kod C# nie działa dla mnie. Działające rozwiązanie można znaleźć tutaj: https://stackoverflow.com/a/36720802/1999917 –