Приложение WPF с Bing Maps Control мучительно тормозит при запуске - PullRequest
2 голосов
/ 10 декабря 2011

В настоящее время я работаю над приложением WPF, поддерживающим отображение. Я использую элемент управления BF Maps WPF Control (отсюда: http://www.microsoft.com/download/en/details.aspx?id=27165), чтобы помочь с отображением, но теперь существует довольно большая проблема:

Запуск приложения занимает довольно много времени, поскольку элемент управления Bing Maps получает все исходные данные для отображения карты.

Отображающая часть моего приложения требуется редко, поэтому было бы неплохо иметь медленный запуск для функции, которая даже не используется каждый раз, поэтому я изначально установил видимость элемента управления как «Свернутый», в надежде, что тогда не будет никаких запросов, но это не поможет.

Есть ли способ явной инициализации элемента управления Bing Maps, когда я хочу использовать его, а не при запуске приложения?

1 Ответ

0 голосов
/ 05 февраля 2013

Я недавно начал использовать элемент управления картами Bing и также столкнулся с той же проблемой.Это не элегантно, но мне удалось обойти его, вручную создав элемент управления Map, когда мне это нужно.

В моем случае, карта находится в центре моего приложения, поэтому мне нужно загрузить егопочти мгновенноПоскольку я хочу, чтобы само приложение сразу полностью отображалось (чтобы пользователь знал, что происходит), я откладываю создание элемента управления Map до тех пор, пока содержимое не будет отображено в MainWindow.Вы можете добиться этого, используя что-то вроде:

XAML

<Grid x:Name="MapPanel">

    <!-- Placeholder text while the map is loading -->
    <TextBlock HorizontalAlignment="Center"
               VerticalAlignment="Center"
               Text="Loading map..." />
</Grid>

Code-Behind

protected override void OnContentRendered(EventArgs e)
{
    base.OnContentRendered(e);

    // Change the cursor to a waiting cursor so the user knows we are loading something
    var previousCursor = Cursor;
    Cursor = Cursors.Wait;

    // Load the application Id credentials required for the Bing map
    var provider = new ApplicationIdCredentialsProvider(Properties.Resources.BingMapsAPIKey);

    // Set up the Bing map control
    var map = new Map();
    map.Mode = new AerialMode(labels: true);
    map.CredentialsProvider = provider;
    map.HorizontalAlignment = HorizontalAlignment.Stretch;
    map.VerticalAlignment = VerticalAlignment.Stretch;

    // Render the map control over the top of the loading text in the map panel
    MapPanel.Children.Add(map);

    // Reset the application cursor
    Cursor = previousCursor;
}

Для вашегоВ этом случае вам не обязательно загружать элемент управления Map.Вместо этого вы могли бы загрузить элемент управления лениво, поэтому вы по существу уведомляете хост-элемент управления, когда требуется карта, и загружаете его в этот момент, если он еще не загружен.

Надеюсь, это поможет.

...