由於只能在主線程上加載對象,所以你幾乎陷入困境,所以我認爲你不會讓它加載得更快。
你可以做的是分散用戶的注意力:我有一個動畫啓動畫面,需要大約10秒才能完成動畫序列。這有幾個目的:
- 它顯示了用戶運動 - 所以他們有一個視覺線索的東西是在
- 它干擾他們,去填補由初始負載所佔用的空間
爲確保流暢的動畫,您需要創建第二個調度程序。下面是我如何做到這一點:
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()));
這樣快?否 用戶是否認爲速度更快?是的
有時,如果你不能給他們速度,你可以給他們活動。這是一個很好的安慰劑。
如何加載標籤的內容可能需要4-5秒?它涉及什麼? –
你看過嗎? http://msdn.microsoft.com/en-us/library/aa970683.aspx – CodeNaked
@NicolasRepiquet UI由標籤組成。每個選項卡最多可以有15個子控件:地圖,圖表,表單等。每個子控件都需要反序列化自身,然後計算佈局並控制渲染。這不是一個簡單的應用程序,這些東西可以加起來。 – gchen