2013-01-24 60 views
2

我有一个WPF应用程序,它将在点击按钮时设置图像源 我想在经过15秒后清除图像源。 我该怎么做? 我曾尝试使用了Thread.sleep但它清除源马上然后就暂停了15秒申请在x秒后删除图像源

以下是我对这个方法

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秒后让图像源清除。 谢谢!

+0

30000三秒,所以你应该把它设置150000 –

+1

的毫秒不是问题15000或150000是无关紧要的,因为它仍然无法工作任何时间。 – twaldron

+1

30000毫秒是三秒?这对我来说是新的,感谢更新。 – Clemens

回答

2

使用DispatcherTimer

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; 
} 
+0

谢谢!如果应用程序运行了整整一天并点击了多次按钮,这是否会造成任何问题?我需要处置计时器还是一切正常? – twaldron

+0

不,您只能在15秒结束前单击按钮来重置/重新启动计时器:-)无需处理,因为您始终只使用一个计时器对象。 – Clemens

+0

完美的作品,谢谢! – twaldron

0

@Clemens答案是好的,但要满足我最近RX神物:

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

不错,我一直听到一些RX的嗡嗡声。猜猜我应该检查出来。谢谢 – twaldron