WinCE7的Silverlight有Sleep()的替代品吗?

时间:2012-09-04 19:49:25

标签: silverlight windows-ce sleep

我正在使用Silverlight for Windows Embedded项目并遇到我的UI线程问题。当前,应用程序UI线程必须基于存储在共享存储器文件中的数据不断更新其显示,然后再次更新UI之前休眠指定的毫秒数。所以本质上代码如下:

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

但是,我相信你们中的一些人知道,不建议在主Silverlight UI线程中使用Sleep()。果然,我的整个嵌入式系统在运行20-30分钟后会崩溃,我已经确定调用Sleep()作为问题。

我需要的是一种替代方法来更新UI,暂停一段时间,然后再次更新UI,无限重复此过程。

据我所知,项目的嵌入性质不允许我使用Sleep()的一些明显替代品,这将是UI线程中更好的解决方案(即Join())。

任何建议都将不胜感激!

1 个答案:

答案 0 :(得分: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();
}