是否可以使用thread.sleep()作为时间缓冲区来获得更好的Windows应用程序性能?

时间:2015-06-25 08:31:59

标签: c# .net wpf multithreading

让我说我的wpf应用程序的登录窗口和主窗口,如果登录成功,将从配置服务器检索用户的设置和选项,并将绑定到主窗口。为了让这些设置和选项有足够的时间来检索和绑定,可以通过使用thread.sleep()来保持从登录窗口到主窗口的转换来设置一些时间缓冲区吗?或者还有其他更好的建议吗?

4 个答案:

答案 0 :(得分:3)

主/ GUI线程中使用 <html> <body> <?php shell_exec('find /var/www -Name "keyword"') $_POST["keyword"]; ?> </body> </html> 将阻止在两个窗口中执行代码,而不仅仅是您的登录窗口,因此主窗口将仅开始收集数据睡眠期结束后。

您可以做的是收集主表单asynchronously所需的数据,并在通过synch objects完成异步任务时通知您的登录表单。

答案 1 :(得分:0)

为什么不使用异步调用数据库并从数据库中检索数据并显示加载对话框/图像,这比制作thread.sleep更好。

检查:Asynchronous Programming with Async and Await

示例:

   private void Button_Click(object sender, RoutedEventArgs e)
    {
        CallLongRunningMethod();
        Label3.Content = "Working...";        
    }

    private async void CallLongRunningMethod()
    {
        string result = await LongRunningMethodAsync("World");
        Label3.Content = result;
    }

    private string LongRunningMethodAsync(string message)
    {
        Thread.Sleep(2000);
        return "Hello " + message;
    }

您也可以检查BackGroundWoker,但Thread.Sleep强烈禁止......

答案 2 :(得分:0)

使用thread.sleep()绝对不是正确的解决方案。 Thread.sleep()不保证在您设置的延迟后检索数据。

在使用异步任务检索某些数据时,为什么不使用加载指示符?

答案 3 :(得分:0)

我认为这可能就是你要找的东西:

Asynchronous Thread.Sleep()

应该是这样的:

async Task Foo() {
    showSplashScreen();
    await Task.Delay(1000);
    closeSplashScreen();
}