2012-09-04 55 views
1

我正在使用Windows Embedded項目的Silverlight,並且遇到了與我的UI線程有關的問題。目前,應用程序UI線程必須根據存儲在共享內存文件中的數據不斷更新其顯示,然後在再次更新UI之前休眠指定的毫秒數。因此,在本質的代碼是類似如下:Silverlight for WinCE7有沒有其他選擇Sleep()?

while(true){ 
    UpdateUI(); //gets data from shared memory and updates graphics 
    Sleep(250); 
} 

但是,我肯定你們當中有些人知道,這是不建議的主要的Silverlight UI線程中使用睡眠()。當然,我的整個嵌入式系統在運行20-30分鐘之後會崩潰,並且我已經將Sleep()的調用確定爲問題。

我需要的是另一種方法來更新用戶界面,暫停一段時間,然後再次更新用戶界面,重複此過程到無限。

據我所知,項目的嵌入性質不允許我使用Sleep()的一些顯而易見的替代方法,這將成爲UI線程(即Join())中更好的解決方案。

任何建議將不勝感激!

+1

爲什麼不在定時器proc中調用UpdateUI? – ctacke

+0

我爲我的無知道歉,但我從未使用過計時器特效。任何建議的資源瞭解更多關於他們? – user1647203

回答

0

一個計時器是一個好得多的路線,然後是一個循環,尤其是在UI線程中有一個Sleep的循環。一個簡單的電話SetTimertimeSetEvent可能是你所追求的。

int WinMain(...) 
{ 
    // initialize xamls stuff 

    // start a timer 
    SetTimer(0, 0, 250, TimerProc); 
    // *OR* 
    timeSetEvent(250, 0, EventProc, NULL, TIME_PERIODIC | TIME_CALLBACK_FUNCTION); 

    // call StartDialog or whatever to launch your UI 
} 

void CALLBACK TimerProc(HWND hwnd, UINT, UINT, DWORD dwTime) 
{ 
    // this will get called every 250ms  
    UpdateUI(); 
} 

void CALLBACK EventProc(UINT uID, UINT uMsg, DWORD dwUser, DWORD dw1, DWORD dw2) 
{ 
    // this will get called every 250ms  
    UpdateUI(); 
} 
+0

謝謝你的幫助! – user1647203

相關問題