我有一个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线程的情况下让子线程进入休眠状态呢?
谢谢!
答案 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.