白い画面が数秒間表示される場合は、タスク (ファイルのダウンロード) に数秒かかっていることを意味します。ウィンドウの「Loaded」イベントをサブスクライブすることにより、ウィンドウがロードされた後にこのタスクを開始できますが、それでもアプリケーションは 3 秒間フリーズします。
ユーザーフレンドリーな方法でこのタスクを処理する方法について、ニーズに合ったソリューションを作成する必要があります。
この情報が取得される前にユーザーがアプリケーションを使用できないようにする場合は、読み込みアニメーションまたは進行状況バーを含むポップアップを作成できます。タスクを完了する時間が与えられているので、これらをアニメーション化できます。
情報がバックグラウンドでロードされている間にユーザーがアプリケーションを使用できるようにする場合は、BackgroundWorker などの非同期設計を使用して別のスレッドに情報をロードし、情報がロードされたときにメイン スレッドをコールバックする必要があります。準備ができてロードされました。Web 要求を使用している場合、多くの場合、"BeginGetResponse" などの非同期オーバーロードを使用して、それらを非同期 Web 要求に変換できます。それはあなたのコードに依存します。
編集:
次のように、ウィンドウのスコープで 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!");
}
}