可以使用thread.sleep()作为时间缓冲区来提高windows应用程序的性能吗

本文关键字:windows 应用程序 性能 缓冲区 时间 sleep thread 可以使 | 更新日期: 2023-09-27 17:59:42

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

可以使用thread.sleep()作为时间缓冲区来提高windows应用程序的性能吗

main/GUI线程中使用Thread.Sleep()将阻止两个窗口中的代码执行,而不仅仅是登录窗口,因此主窗口只有在睡眠期结束后才会开始收集数据。


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

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

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

我想这可能就是您想要的:

异步线程.Sleep()

应该是这样的:

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

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

检查:使用Async和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.睡眠是一个很难的选择。。