J'ai un programme de console qui a des composants qui exécutent comme ceci:de Windows Application console Mise en Collé (besoins de presse Key)
void start() {
while(true){
DoSomething();
Thread.Sleep(1000*5);
}
}
Mon principal point d'entrée ressemble [code pseudo-ish]
Thread.Start(Componenet1.Start);
Thread.Start(Componenet2.Start);
while(true){
Console.Writeline("running");
Thread.Sleep(1000*5);
}
Il n'y a aucun Console.Reads n'importe où. Mon problème est PARFOIS l'application fonctionnera bien mais s'arrêtera et si j'appuie sur n'importe quelle clef sur la fenêtre elle commencera à fonctionner encore. Cela arrive assez rarement, mais j'ai ce programme déployé sur 100+ VM fonctionnant 24/7 dans un environnement automatisé.
Toujours sur l'ordinateur, j'ai des scripts AHK et d'autres choses qui manipulent la souris mais je ne sais pas si cela a quelque chose à voir avec ça.
Notez également que parfois le CPU peut vraiment fonctionner à 100% sur les machines alors peut-être que la priorité des threads est un problème?
SOLUTION: Vous devez désactiver le mode d'édition rapide. Ici travaille code C# pour ce faire:
// 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);
essayer de commenter 'DoSomething();' et voir si elle se comporte de la même manière – Andrey
La réponse dans le code C# ne semble pas fonctionner. La réponse ci-dessous acceptée. – liang
Le code C# ne fonctionne pas pour moi. Une solution de travail peut être trouvée ici: https://stackoverflow.com/a/36720802/1999917 –