2011-12-11 117 views
0

我有这段代码的问题。我需要暂停两秒才能看到图像。所以我让线程进入睡眠状态,但它不起作用。我需要等待两秒钟,直到我传递给下一个值i线程睡眠周期doens't工作wp7

for (int i = 0; i < media_count; i++) 
{ 
    if (type_by_order[i].ToString().Equals("video")) 
     Play_Graphics(name_file_by_order[i]); 
    if (type_by_order[i].ToString().Equals("image")) 
     ImageReadDecode(name_file_by_order[i]); 
    Thread.Sleep(2000); 
} 

你能告诉我什么是错的吗?这不适用于Windows Phone 7?

+0

你能解释你观察到的行为吗?例如,它是否忽略了你的睡眠?还是等待太久? – Shahbaz

+0

等待长..然后显示所有的过程.. – jpmd

+0

对不起,我不知道,我只是想让你知道你需要提供更多的信息,为人们尝试解决你的问题。我的下一个建议是使用你的代码所在的语言来标记你的问题(是Java吗?)。这样,你吸引更多的人来解决你的问题。 – Shahbaz

回答

2

正如Hans指出的那样,您正在UI线程中休眠。这将阻止UI更新,直到完成for循环完成。确保你在后台睡眠,然后更新UI线程。这里是和伪代码示例

BackgroundWorker bgw = new BackgroundWorker(); 
    bgw.DoWork += (sender, e) = { 
    for loop { 
     Deployment.Current.Thread.BeginInvoke(() => { 
      ImageReadDecode 
     }); 
     Thread.Sleep(2000); 
    } 
    } 
    bgw.RunAsync(); 

请注意,使用BeginInvoke并不保证您的图像是同时添加/加载的。它将它推送到UI线程,并让UI线程确定它何时将其添加。

希望这是有道理的。关于如何处理UI线程和后台线程,还有更多的关于stackoverflow的例子。