2013-01-24 93 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