tags:

views:

27

answers:

1

My WPF app consists of a NavigationWindow, and then a set of Pages defined as separate xaml files. The NavigationWindow loads and displays the various pages in turn.

My problem is that loading the pages is expensive and may fail. Thus, I want to preload the page in the background, and then only call Navigate() once the page has finished loading.

In pseudocode what I would want is

    Page nextPage;
    try
    {
    nextPage = LoadPageFromURI(new URI(...));
    }
    catch
    {
/// constructor of the page threw an exception ... load a different page
    }

    myNavigationWindow.Navigate(nextPage);

I can't however find framework functions to do what I want. Could someone who knows WPF better give me a hand? Thanks you!

A: 

It looks like Application.LoadComponent() will do what I want.

Sample code:

Page page;

try
{
    page = (Page) Application.LoadComponent(new Uri(path, UriKind.Relative));
}
catch (Exception ex)
{
    // note error and abort
}

Action action = () => ((NavigationWindow)Application.Current.MainWindow).Navigate(page);
Application.Current.Dispatcher.BeginInvoke(action, DispatcherPriority.Normal);
Slaggg