如何在不冻结WPF应用程序中的UI线程的情况下使子线程休眠?

时间:2013-03-30 19:12:45

标签: c# wpf multithreading sleep thread-sleep

我有一个WPF应用程序,我有单独的线程运行来完成任务,我想让当前的线程进入睡眠状态,

  

Thread.CurrentThread.Sleep(10000)

我确实在Java中看到它,但在C#中看不到它。我知道我只有一个UI线程,所以如果我使用Thread.Sleep(10000),我的UI线程将被阻塞。我正在使用async并等待.NET 4.5。

  

var words = await Task.Factory.StartNew(()=> {   StringMgr.TextToUniqueWords(File.ReadAllText(文件名));

     

//我希望能够在没有UI冻结的情况下将此线程休眠10秒

     

});

那么如何在不冻结WPF应用程序中的UI线程的情况下让子线程进入休眠状态呢?

谢谢!

2 个答案:

答案 0 :(得分:5)

由于您已经在使用async,因此您可以采用异步方式:

var words = await Task.Run(async () =>
{
  StringMgr.TextToUniqueWords(File.ReadAllText(filename));
  await Task.Delay(TimeSpan.FromSeconds(10));
});

但是,我怀疑睡觉是你试图解决的实际问题的错误解决方案。如果您想针对实际问题发布其他问题,可以找到更好的解决方案。

答案 1 :(得分:3)

你试过吗? Sleeping thread inside a Task won't freeze your GUI但它会使当前后台线程进入睡眠模式,并且您的UI将始终保持响应 -

        Task.Factory.StartNew(() =>
            {
                Thread.Sleep(5000000); // this line won't make UI freeze.
            });
        Thread.Sleep(5000000); // But this will certainly do.