Laden...

ConsolenApp mit Threads und Console.CancelKeyPress

Erstellt von Markus M. vor 13 Jahren Letzter Beitrag vor 13 Jahren 1.314 Views
M
Markus M. Themenstarter:in
25 Beiträge seit 2009
vor 13 Jahren
ConsolenApp mit Threads und Console.CancelKeyPress

Hallo zusammen,

ich habe ein kleines Problem.
Ich habe mir eine kleine Klasse geschrieben, mit der ich mir ganz einfach ein Menü für die Konsole zusammenbauen kann.
Aufgerufen werden soll das Menü durch drücken von STRG + C.
Wenn ich das ganze in einer Standaloneanwendung laufen lasse, funktioniert alles so wie es soll.

Nun habe ich das ganze in eine bestehende Consolenanwendung integriert.
Ganz am Anfang des Programms baue ich das Menü zusammen und registriere mich für das Cancel-Event.
Im weiteren Programmablauf werden einige Threads über einen Threadpool gestartet.
Das Problem ist nun, dass durch drücken von STRG + C, das Menü nicht zuverlässig aufgerufen wird.
Drückt man die Tasten kurz nach Programmstart, kann es sogar sein, dass das Program beendet wird.
Wenn man einen Moment wartet und erst dann drückt, passiert erstmal nichts.
Nach 10 - 20 Sek erscheint dann das Menü.

Als Menüpunkt habe ich eine Methode hinzugefügt, die Daten aus einem Dictionary liest und auf die Console ausgibt. Die Methode wird über einen Invoke von der Menüklasse aufgerufen.
Wenn ich die Methodeaufrufe, komme ich garnicht mehr ins Menü.

Ich habe auch schon alles mögliche versucht, z.B. die Menüklasse in einem eigenen Thread laufen lassen oder die Methode die ich übers Menü aufrufen kann in einem eigenen Thread ausgeführt.

Ich weiß nun einfach nicht mehr weiter.

Es sollte schon eine Konsolenanwendung bleiben, da ich das Program später mit Mono etc. unter Linux laufen lassen möchte.

F
10.010 Beiträge seit 2004
vor 13 Jahren

Das ist ein mehr oder weniger sinnloses unterfangen.
Es kommt immer darauf an, wo das ctrl-c "erscheint", ist es einer der Threads oder die stelle die Du erwartest.

Warum auch?
WindowsForms läuft doch unter Mono, sowohl in Linux als auch aufm MAC.

795 Beiträge seit 2006
vor 13 Jahren

Hi!

Ctrl+C ist dafür da, um eine Anwendung zu beenden. Das ist in allen mir bekannten Terminals bzw. Konsolen so implementiert. Wenn eine Anwendung das umbaut, ist für mich ein K.O.-Kriterium für (bzw. gegen) die Anwendung. Ich würde dir raten, eine andere Tastenkombi für das Menü zu wählen.

Gruß, Christian.

`There are 10 types of people in the world: Those, who think they understand the binary system Those who don't even have heard about it And those who understand "Every base is base 10"`
M
Markus M. Themenstarter:in
25 Beiträge seit 2009
vor 13 Jahren

@FZelle
Windows Forms fällt weg, da das ganze auf ner SSH-Konsole laufen soll.

@TheBrainiac
Hmm. Da muss ich dann nochmal schauen.
Dachte STRG + C ist schön, da es nen Event auslöst und ich mich ums abfangen nicht kümmern muss.
Des man mit STRG + C eigentlich die Anwendung beendet weiß ich.
Da das Program nur für mich ist, währ mir des aber egal.
Ich würde stattdessen einen Menüpunkt zum beenden hinzufügen.