2016-10-13 5 views
0

Dies ist eine sehr oberflächliche Frage, denn ich habe keine Ahnung, wie dieses Problem zu lösen. Ich habe viel gesucht, aber nichts gefunden, weil ich keine Schlüsselwörter dafür kann.Füllen laufende Aufgabe mit String als Parameter

Zuerst schauen Sie sich dieses Bild bitte:

enter image description here

ich eine statusbar erstellen möchten. In diesem Beispiel möchte ich den Status "Hello World" setzen. Dazu habe ich eine neue Aufgabe erstellt und den String "Hello World" angezeigt. Nach 5 Sekunden sollte der Status gelöscht werden. Hier ist mein Code dafür:

//command to set a new status 
 
//this will be executet from another method 
 
await this.SetStatusMessage("Hello World"); 
 

 
public async Task SetStatusMessage(string pStatusMessage) 
 
{ 
 
    await Task.Run(async() => 
 
    { 
 
    this.Dispatcher.Invoke(() => 
 
    { 
 
     this.txtStatusMessage.Text = pStatusMessage; 
 
    }); 
 
    
 
    await Task.Delay(5000);  
 
    
 
    this.Dispatcher.Invoke(() => 
 
    { 
 
     this.txtStatusMessage.Text = ""; 
 
    }); 
 
    }); 
 
}

Mein Problem ist jetzt, dass ich manchmal einen neuen Status gesetzt werden soll, während der alte Zustand noch aktiv ist. In diesem Fall sollte der alte Status überschrieben werden und die await Task.Delay(5000); sollte zurückgesetzt werden und mit dem Zählen von 0 beginnen. Nach 5000 ms ohne Eingabe innerhalb dieser Task sollte der Ausgang gelöscht werden.

Es wäre schön, wenn jemand von mir mir ein paar Ideen oder ein Stichwort geben könnte. Vielen Dank.

Antwort

0

Es gibt mehrere Möglichkeiten, dies zu tun. Die Verwendung von CancellationTokenSource ist nur eine Möglichkeit.

Sie können eine CancellationTokenSource an die äußere Aufgabe übergeben, um dies zu erreichen. Here ist ein Beispiel. Sie können die aktuelle Aufgabe abbrechen und durch erneutes Aufrufen von SetStatusMessage eine neue Aufgabe erstellen. Und bevor Sie die Text zurücksetzen, überprüfen Sie, ob die Aufgabe nicht abgebrochen wird.

Verwandte Themen