2010-11-13 52 views
1

我正在研究WP7的骰子游戲,它涉及每回合多次擲骰。在CPU輪到時,我需要放慢進程,以便用戶可以看到發生了什麼。在挖掘一下之後,我發現可以以這種方式使用DispatchTimer。在Silverlight Mobile中實現DispatchTimer

問題是,我不知道這是如何工作的。查看MSDN文檔只會讓我撓腦袋,而大多數在線示例都會將它鏈接到按鈕按下或鼠標點擊。

所以我有一個do while循環,它會調用我的骰子滾動函數五次,並更改骰子圖像以顯示結果是什麼。

現在定時器的代碼是:

DispatcherTimer dispatcherTimer = new DispatcherTimer(); 
dispatcherTimer.Tick += new EventHandler(dispatcherTimer_Tick); 
dispatcherTimer.Interval = new TimeSpan(0,0,1); 
dispatcherTimer.Start(); 

然後:

private void dispatcherTimer_Tick(object sender, EventArgs e) 
{ 
    int i = 0; 
    do 
    { 
     cpuTurn(); 
     i++; 
    } 
    while(i < 6); 
} 

但是,這是行不通的。那麼我做錯了什麼?我是否以錯誤的方式使用計時器?

回答

4

是的,在您的事件處理程序完成之前,顯示不會更新。只調用一次cpuTurn()。將循環計數器移到方法外,使其成爲類成員。調用dispatcherTimer.Stop()時,它的計數最多爲6.當CPU再次輪到時,重置計數器並調用Start()。

谷歌「事件驅動編程」可以學習更多關於編寫GUI代碼時所需的編程類型。

+0

優秀。非常感謝你。 – BigPete 2010-11-14 02:25:16