在Silverlight中,如何在不占用线程的情况下使程序进入睡眠状态

时间:2011-09-01 03:40:14

标签: multithreading silverlight

我有一个需要在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都会被执行,就像动画一样。

2 个答案:

答案 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在他的示例中所建议的那样)。