如果您看到白屏几秒钟,这意味着您的任务(下载文件)需要几秒钟。您可以在窗口加载后通过订阅窗口的“Loaded”事件来启动此任务,但它仍会冻结应用程序 3 秒。
您必须创建一个适合您需要的解决方案,以便以用户友好的方式处理此任务。
如果您想在检索此信息之前阻止用户使用应用程序,您可以创建一个带有加载动画或进度条的弹出窗口。您可以为这些设置动画,因为您的任务有时间完成。
如果您希望用户能够在后台加载信息时使用您的应用程序,则需要使用诸如 BackgroundWorker 或其他异步设计之类的东西将信息加载到另一个线程上,然后在信息加载时回调主线程准备好并加载。如果您正在使用 Web 请求,您通常可以通过使用诸如“BeginGetResponse”之类的异步重载将它们转换为异步 Web 请求。这取决于您的代码。
编辑:
您可以像这样在 Window 范围内创建 BackgroundWorker:
public partial class MainWindow : Window
{
private BackgroundWorker worker;
public MainWindow()
{
InitializeComponent();
Loaded += MainWindow_Loaded;
}
void MainWindow_Loaded(object sender, RoutedEventArgs e)
{
worker = new BackgroundWorker();
worker.DoWork += worker_DoWork;
worker.RunWorkerCompleted += worker_RunWorkerCompleted;
worker.RunWorkerAsync();
consolemessage("STARTUP", "Verifying existence of essential files...");
}
void worker_DoWork(object sender, DoWorkEventArgs e)
{
if (!File.Exists("Interop.NATUPNPLib.dll"))
Download("link here", "Interop.NATUPNPLib.dll");
if (!File.Exists("LICENSE.txt"))
Download("link here", "LICENSE.txt");
}
void worker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
// Signal your UI that the files are now available here if needed.
consolemessage("STARTUP", "Essential file validation completed!");
}
}