我有一个需要在for循环中嵌入后台睡眠的情况。 有什么方法可以做到这一点而不突破for循环的形状?
for (;;)
{
Dosomething();
Thread.Sleep(5000); // this blocks the UI thread, hope to find someway to sleep in background
}
-------------编辑--------------
在Dosomething()中,有一些UI线程操作,如listBoxA.width + = 5(没有调度程序); 在这里,UI不会刷新,直到所有循环结束。 我想使用Sleep的原因是我希望看到UI刷新每个Dosomething都会被执行,就像动画一样。
答案 0 :(得分:2)
您没有提供有关您需要代码的详细信息,因此我将尝试使用此代码:
int counter = 4;
DispatcherTimer _timer = new DispatcherTimer();
_timer.Interval = TimeSpan.FromSeconds(5);
_timer.Tick += (s, e) =>
{
DoSomething();
counter--;
if (counter == 0) _timer.Stop();
};
_timer.Start();
答案 1 :(得分:0)
Silverlight中的所有内容都应设计为异步运行。您的示例根本不是在Silverlight中运行常规后台任务的方法(可能是您希望DoSomething()
执行的操作)。
尝试阅读BackgroundWorker以便在另一个线程上运行您的任务,并DispatchTimer运行常规任务(正如Rumplin在他的示例中所建议的那样)。