Приложение WPF с Bing Maps Control мучительно тормозит при запуске
В настоящее время я работаю над приложением WPF с поддержкой картографирования. Я использую элемент управления BF Maps WPF (отсюда: http://www.microsoft.com/download/en/details.aspx?id=27165), чтобы помочь с отображением, но теперь существует довольно большая проблема:
Запуск приложения занимает довольно много времени, потому что элемент управления Bing Maps извлекает все начальные данные для отображения карты.
Часть отображения моего приложения требуется редко, поэтому было бы неплохо иметь медленный запуск для функции, которая даже не используется каждый раз, поэтому я изначально установил видимость элемента управления как "Свернутый" в надежде, что тогда не будет запросов будет сделано, но это не поможет.
Есть ли способ явно инициализировать элемент управления Bing Maps, когда я хочу его использовать, а не при запуске приложения?
1 ответ
Недавно я начал использовать элемент управления картами 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
контроль в этой точке. Вместо этого вы могли бы загружать элемент управления лениво, поэтому вы по существу уведомляете хост-элемент управления, когда требуется карта, и загружаете его в тот момент, если он еще не был загружен.
Надеюсь, это поможет.