簡體   English   中英

如何在倒數計時器后添加延遲

[英]How do I add a delay after a count down timer

我正在使用DispatcherTimer在觸發相機上的釋放之前執行倒計時。 UpdateCountdown方法用於更改在相機觸發前向用戶顯示的圖像。 與其立即執行TakePicture方法,我希望在計數器達到零並顯示最后一張圖像后稍有延遲。

下面顯示的代碼導致_countdown = 1點發生暫停。 當最終的圖像顯示和TakePicture()幾乎同時觸發時(我認為TakePicture首先發生)。

_countdownTimer = new DispatcherTimer();
_countdownTimer.Interval = TimeSpan.FromSeconds(1);
_countdownTimer.Tick += new EventHandler(delegate(object s, EventArgs a)
     { UpdateCountdown(); } );

_countdownTimer.Tick += new EventHandler(delegate(object s, EventArgs a)
     {if (_countdown == _countdownMax)
        {
            System.Threading.Thread.Sleep(2000);  // Slight delay before taking picture
            Camera.TakePicture();
        } });
    }

public void StartCountdown()
{
    if (doCount)
    {
        doCount = false;
        UpdateCountdown();
        _countdownTimer.Start();
    }
}

private void UpdateCountdown()
{
    _countdown--;
    CountdownImage = _countDownImages[_countdown]; // Data bound to Image Control

     if (_countdown == 0)
     {
       _countdown = _countdownMax;
       _countdownTimer.Stop();
       doCount = true;
      }

我在時間安排上沒有考慮什么?

當您更改控件屬性時,UI不會立即更新-它僅在線程變為空閑時(即,在所有事件處理程序執行完之后)更新。

Thread.Sleep阻塞線程,事件處理程序未完成執行,UI也未重繪。

您必須使用另一個計時器(在現有計時器的最后一個刻度上啟動一個新計時器,並在新計時器的該刻度上調用TakePicture),或者甚至更好的是,使用現有計時器的最后一個刻度-在(_countdown <= _countdownMax) ,在(_countdown == _countdownMax + 1)(_countdown == _countdownMax + 1)

為什么不讓您的顯示器總是比剩余的秒數少顯示1。 這樣,當您達到零時(顯然要用Math.Max(0,_countdown來防止顯示-1)),即使還有一秒鍾,時間也似乎已經用完了。

編輯:我的意思是暗示但未聲明-是這樣,您可以只擁有一個 Tick處理程序,而根本不使用睡眠,這只會阻塞UI,反而可能會阻塞UI的更新。

我認為事件不能保證事件處理程序按其注冊順序觸發。 嘗試

_countdownTimer.Tick += new EventHandler(delegate(object s, EventArgs a)     
{
        UpdateCountdown();
        if (_countdown == _countdownMax)
        {
            System.Threading.Thread.Sleep(2000);  // Slight delay before taking picture
            Camera.TakePicture();
        }
      });
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM