-1
ステータスバーを作成したいと思います。ステータスは、クラス内の任意のメソッドから設定する必要があります。ステータスが設定されている場合は、5000msが表示されている必要があります。 5000ms後、ステータスは空でなければなりません。時には、古いステータスがまだアクティブな状態を設定したいと思うこともあります。この場合、古いステータスを上書きし、Task.Delay(5000)を待ちます。リセットすると、私の現在のコードは次のようになります0非同期タスクを取り消して再アクティブ化する
からカウントを開始する必要があります:それは実行されている前に、私はタスクをキャンセルするので
public CancellationTokenSource tokenSource { get; set; }
public CancellationToken token { get; set; }
public async Task SetStatusMessage(string pStatusMessage)
{
tokenSource.Cancel();
await Task.Run(async() =>
{
if (token.IsCancellationRequested)
{
token.ThrowIfCancellationRequested();
}
this.Dispatcher.Invoke(() =>
{
this.txtStatusMessage.Text = pStatusMessage;
});
await Task.Delay(5000, token);
this.Dispatcher.Invoke(() =>
{
this.txtStatusMessage.Text = "";
});
}, token);
public async void AnyMethod()
{
await this.SetStatusMessage("Hello World");
}
これは、機能していません。だから私はOperationCanceledException
(?)を得たのです。
あなたは 'CancellationTokenSource'を設定していますか?キャンセルするたびにこの値を再設定する必要があります。 'CancellationTokenSource tokenSource = new CancellationTokenSource();'を呼び出し、そのトークンをタスク遅延に渡します。 '待ち時間Task.Delay(5000、tokenSource.Token);' –