Fenster bei Konsolenanwendung offen halten


Status
Dieses Thema wurde gelöst! Zur Lösung gehen…

CopWorker

Mitglied
Hallo zusammen,

gerade bin ich dran bei einer Konsolenanwendung das Fenster nach Ablauf der Anwendung eine definierte Zeit offen zu halten.
Das mit der Zeitverzögerung und die Statusausgabe (wie lange dauert´s noch) im Ausgabefenster bekomme ich hin.
Wie ist es möglich, das Fenster solange offen zu halten.
Wie ist es möglich, das Fenster danach dann zu schließen.

Bist jetzt verwende ich Console.ReadyKey();
Es soll aber in Zukunft ohne Tastatureingabe ablaufen.
Die Anwendung soll das steuern.

Vielen Dank.
Grüße von CopWorker
 

Spyke

Premium-User
Eine Schleife

C#:
while(nichtEnde)
{
    //irgendwas machen oder warten oder so
    //Schleife läuft solange wie nichtEnde auf false gesetzt wurde
}
oder ev. schöner lesbar (oben das nichtEnde schaut mir irgendwie blöd aus)
C#:
while(true) //wirklich der boolsche Wert true hier gemeint
{
    //irgendwas machen oder warten oder so
    if(meinEndeEreignis)
        break; //Schleife verlassen
}
 

CopWorker

Mitglied
Hallo Spyke,

danke dafür.
Eine Schleife wäre die einfachere Möglichkeit gewesen.
Ich hab´s mit einem Timer Thread gelöst.
C#:
// Erstellen eines AutoResetEvent, um zu signalisieren, dass der Timeout-Schwellenwert im Timer-Rückruf erreicht wurde.
var autoEvent = new AutoResetEvent(false);
var statusChecker = new StatusChecker(iCloseShellSleepTime);

// Timer erstellen, der CheckStatus nach 0 ms aufruft
var stateTimer = new System.Threading.Timer(statusChecker.CheckStatus, autoEvent, 0, iPeriode);

// Wenn autoEvent das zweite Mal signalisiert, den Timer auflösen
autoEvent.WaitOne();
stateTimer.Dispose();
C#:
/// <summary>
///
/// </summary>
class StatusChecker
{
    private string strTxt = string.Empty;
    private int iActTime;
    private int iLastLen = 0;
    private int iTemp = 0;
    private int iTotalWidth = 0;


    public StatusChecker(int iTime)
    {
        iActTime = iTime;
    }


    /// <summary>
    /// Diese Methode wird vom Timer-Delegaten aufgerufen
    /// </summary>
    /// <param name="stateInfo"></param>
    public void CheckStatus(Object stateInfo)
    {
        AutoResetEvent autoEvent = (AutoResetEvent)stateInfo;

        strTxt = string.Format("\rDie Anwendung wird in {0} s geschlossen", iActTime);
        iTemp = strTxt.Length; //Textlänge zwischenspreichern, denn diese wird beim strTxt.PadRight noch mal geändert.


        //Wenn sich die Textlänge verkürzt dann rechtsseitig mit Leerzeichen auffüllen
        if (strTxt.Length < iLastLen)
        {
            iTotalWidth = strTxt.Length + (iLastLen - strTxt.Length);
            strTxt = strTxt.PadRight(iTotalWidth, ' ');
            Console.Write(string.Format("{0}", "\r" + strTxt));
        }

        //Jetzt erst gespeicherte Textlänge als letzte Textlänge hinterlegen.
        iLastLen = iTemp;

        Console.Write(strTxt, iActTime);

        if (iActTime <= 0)
            autoEvent.Set(); // Zähler zurücksetzen und dem wartenden Thread signalisieren
        else
            iActTime--;
    }
}
Grüße von CopWorker
 
Status
Dieses Thema wurde gelöst! Zur Lösung gehen…

Neue Beiträge