2016-10-13 9 views
0

これはどのようにこの問題を解決するかわからないので、これは非常に疑問な質問です。私はたくさんの検索をしましたが、何も見つかりませんでした。なぜなら、検索できるキーワードがわからないからです。パラメータを文字列で実行タスクを入力してください

まず、この画像にしてください見て:

enter image description here

私はstatusbarを作成したいです。この例では、ステータス「Hello World」を設定します。このため私は新しいタスクを作成し、文字列 "Hello World"を表示しました。 5秒後にステータスをクリアする必要があります。ここに私のコードは、このためです:

//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 = ""; 
 
    }); 
 
    }); 
 
}

私の問題は今、古いステータスがまだアクティブである間、時々私は新しいステータスを設定すること。この場合、古いステータスを上書きし、await Task.Delay(5000);をリセットし、0からカウントを開始する必要があります。このタスクの内部に入力がない状態で5000ms後に、出力をクリアする必要があります。

あなたの誰かが私に検索するためのアイデアやキーワードを教えてくれればいいと思います。ありがとう。

答えて

0

これを行う方法は複数あります。 CancellationTokenSourceを使用すると、それを行う方法の1つに過ぎません。

これを達成するために、CancellationTokenSourceを外部タスクに渡すことができます。 Hereがその例です。もう一度SetStatusMessageを呼び出して、現在のタスクをキャンセルして新しいタスクを作成することができます。 Textをリセットする前に、タスクがキャンセルされていないかどうかを確認します。

関連する問題