ich ein Konsolenprogramm habe, die verschiedenen Komponenten hat, die wie folgt ausgeführt werden:Windows-Konsole-Anwendung zu (Benötigt Key Press)
void start() {
while(true){
DoSomething();
Thread.Sleep(1000*5);
}
}
Mein Haupteinstiegspunkt sieht aus wie [pseudo-ish Code]
Thread.Start(Componenet1.Start);
Thread.Start(Componenet2.Start);
while(true){
Console.Writeline("running");
Thread.Sleep(1000*5);
}
Es gibt keine Console.Reads überall. Mein Problem ist manchmal die Anwendung wird gut laufen, aber dann aufhören und wenn ich eine beliebige Taste auf dem Fenster drücken wird es wieder funktionieren. Dies passiert ziemlich selten, aber ich habe dieses Programm auf 100+ VMs installiert, die 24/7 in einer automatisierten Umgebung laufen.
Auch auf dem Computer habe ich einige AHK-Skripte und andere Sachen, die die Maus manipulieren, aber nicht sicher, ob das etwas damit zu tun hat.
Beachten Sie auch, dass manchmal die CPU wirklich auf den Maschinen zu 100% ausgeführt werden kann, vielleicht Thread-Priorität ein Problem ist?
LÖSUNG: Sie müssen den Schnellbearbeitungsmodus deaktivieren. Hier arbeitet C# -Code, dies zu tun:
// 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);
versuchen, 'DoSomething();' kommentieren und sehen, ob es sich gleich verhält – Andrey
Die Antwort in C# Code scheint nicht zu funktionieren. Die unten akzeptierte Antwort tut es. – liang
Der C# -Code funktioniert nicht für mich. Eine funktionierende Lösung kann hier gefunden werden: https://stackoverflow.com/a/36720802/1999917 –