使用字符串作为参数填充运行任务

时间:2016-10-13 10:53:32

标签: c# wpf asynchronous

这是一个非常肤浅的问题,因为我不知道如何解决这个问题。我搜索了很多,但没有找到任何东西,因为我不知道我可以搜索的关键字。

首先,请看这个图像:

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之后,应该清除输出。

如果有人能给我一些想法或关键字来搜索,那就太好了。感谢。

1 个答案:

答案 0 :(得分:0)

有多种方法可以做到这一点。使用CancellationTokenSource只是一种方法。

您可以将CancellationTokenSource传递给外部任务,以实现此目的。 Here就是一个例子。您可以通过再次调用SetStatusMessage取消当前任务并创建新任务。在重置Text之前,检查任务是否未被取消。