Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wpf x秒后删除图像源_Wpf_Multithreading - Fatal编程技术网

Wpf x秒后删除图像源

Wpf x秒后删除图像源,wpf,multithreading,Wpf,Multithreading,我有一个WPF应用程序,它将在单击按钮时设置图像源 我想在这么多秒后清除图像源,比如说15秒过去了。 我该怎么做? 我曾尝试使用Thread.sleep,但它会立即清除源代码,然后暂停应用程序15秒 以下是我对这种方法的看法 private void btnCapture_Click(object sender, RoutedEventArgs e) { imgCapture.Source = //my image source; Thread.Sleep(15000)

我有一个WPF应用程序,它将在单击按钮时设置图像源 我想在这么多秒后清除图像源,比如说15秒过去了。 我该怎么做? 我曾尝试使用Thread.sleep,但它会立即清除源代码,然后暂停应用程序15秒

以下是我对这种方法的看法

 private void btnCapture_Click(object sender, RoutedEventArgs e)
 {  
    imgCapture.Source = //my image source;

    Thread.Sleep(15000);
    imgCapture.Source = null;

 }
我也试过了

 private void btnCapture_Click(object sender, RoutedEventArgs e)
  {  
    imgCapture.Source = //my image source;


    imgCapture.Source = null;
     Thread thread = new Thread(new ThreadStart(clearSource));
        thread.Start();

  }

    private void clearSource()
    {
        Thread.Sleep(15000);
        imgCapture.Source = null;
    }
但是我收到一个错误,说调用线程无法访问此对象,因为另一个线程拥有它。
我怎样才能在15秒后清除该图像源。 谢谢

使用:


@克莱门斯的回答很好,但为了满足我最近的迷恋:


30000是3秒,因此您应该将其设置为150000毫秒不是问题15000或150000是无关的,因为它在任何时间内都不起作用。30000毫秒是3秒?这对我来说是新的,谢谢你的更新。谢谢!如果应用程序运行了一整天并多次单击该按钮,这会导致任何问题吗?我需要处理计时器还是一切正常?不,如果在15秒结束前单击按钮,您只能重置/重新启动计时器:-)无需处理,因为您始终只使用一个计时器对象。很好,我听到一些接收嗡嗡声。我想我也应该去看看。谢谢
DispatcherTimer timer = new DispatcherTimer { Interval = TimeSpan.FromSeconds(15) };

    // in constructor
    timer.Tick += OnTimerTick;

private void btnCapture_Click(object sender, RoutedEventArgs e)
{
    imgCapture.Source = //my image source;
    timer.Start();
}

private void OnTimerTick(object sender, EventArgs e)
{
    timer.Stop();
    imgCapture.Source = null;
}
void btnCapture_Click(object sender, RoutedEventArgs e)
{
    imgCapture.Source = //my image source;
    Observable.Interval( TimeSpan.FromSeconds( 15 ) ).TimeInterval().Subscribe( _ => imgCapture.Source = null );
}