1

我正在为 Windows Embedded 项目开发 Silverlight,但我的 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())。

任何建议将不胜感激!

4

1 回答 1

0

计时器是比循环更好的路由,尤其是在 UI 线程中带有睡眠的循环。对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();
}
于 2012-09-06T20:08:55.467 回答