什么代码更好地在工作线程工作时延迟(等待)主线程?
1)
int ticks = System.Environment.TickCount;
while (System.Environment.TickCount - ticks < milliseconds);
2)
Thread.Sleep(milliseconds);
3)
Your variant.
谢谢。
ADDED
SOLUTION:
答案 0 :(得分:5)
这些都不好。当工作线程正在工作时,任何一个都会导致UI无响应。
相反,您应该安排工作项在工作线程上运行,然后在工作完成时将消息发送回UI线程。
从工作线程在UI线程上运行的一种方法是:
Deployment.Current.Dispatcher.BeginInvoke(() =>
{
// Your UI thread code to run here.
}
您也可以使用background workers。
答案 1 :(得分:3)
假设您使用的是后台工作者类,这应该可以满足您的所有需求。正如另一个答案中所说,你提供的解决方案会让你的程序陷入困境,从而打败另一个主题。
答案 2 :(得分:2)
您可以await
您的后台操作异步等待直到完成。我不建议通过阻止一段时间来完成轮询。
await
由Async CTP提供,但尚未最终确定,但通常认为它包含在Visual Studio vNext中。特别是,Async CTP在Silverlight 5 RC上不起作用(尽管Silverlight 4确实有效)。
答案 3 :(得分:0)
我没有找到有效的答案,所以决定更深入地研究这个问题。 这是不使用Thread.Sleep的代码:
public void SetReady()
{
lock (syncObj)
{
ready = true;
Monitor.Pulse(syncObj);
}
}
public void Wait()
{
lock (syncObj)
{
while (!ready)
{
Monitor.Wait(syncObj);
}
}
}
有关详情,请参阅:Wait Timeouts