メインスレッドにしかオブジェクトをロードできないため、かなり行き詰まっています。したがって、これ以上速くロードすることはできないと思います。
あなたができることは、ユーザーの注意をそらすことです。アニメーションのスプラッシュ画面があり、アニメーションシーケンスを実行するのに約10秒かかります。これには多くの目的があります。
- それはユーザーの動きを示しています-それで彼らは何かが起こっているという視覚的な手がかりを持っています
- それはそれらの気をそらし、初期負荷によって占められたスペースを埋めます
スムーズなアニメーションを確保するには、2番目のディスパッチャを作成する必要があります。これが私がそれをする方法です:
public class AppEntry : Application
{
private static ManualResetEvent _resetSplashCreated;
internal static Thread SplashThread { get; set; }
internal static SplashWindow SplashWindow { get; set; }
private static void ShowSplash()
{
SplashWindow = new SplashWindow();
SplashWindow.Show();
_resetSplashCreated.Set();
Dispatcher.Run();
}
[STAThread]
public static void Main()
{
_resetSplashCreated = new ManualResetEvent(false);
SplashThread = new Thread(ShowSplash);
SplashThread.SetApartmentState(ApartmentState.STA);
SplashThread.IsBackground = true;
SplashThread.Name = "Splash Screen";
SplashThread.Start();
_resetSplashCreated.WaitOne();
var app = new App();
app.DispatcherUnhandledException += new DispatcherUnhandledExceptionEventHandler(app_DispatcherUnhandledException);
app.InitializeComponent();
app.Run();
}
static void app_DispatcherUnhandledException(object sender, DispatcherUnhandledExceptionEventArgs e)
{
// MessageBox.Show(e.Exception.StackTrace);
}
}
[プロジェクトのプロパティ]/[アプリケーション]タブで、スタートアップオブジェクトとしてAppEntryクラスを設定しました。
アプリのOnStartupメソッドの最後でスプラッシュ画面を閉じます。
AppEntry.SplashWindow.Dispatcher.BeginInvoke(DispatcherPriority.Background,
new Action(() => AppEntry.SplashWindow.Close()));
これは速いですか?いいえユーザーはそれが速いと思いますか?はい
時々、あなたが彼らにスピードを与えることができないならば、あなたは彼らに活動を与えることができます。それは素晴らしいプラセボです。