Geographic Information Systems Stack Exchange is a question and answer site for cartographers, geographers and GIS professionals. It's 100% free, no registration required.

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

I have the following code, which works fine if you just want to populate one Image with a response from Bing Maps. But if I try to do two then the variable _currentImage always ends up being "image1" because the calls are asynchronous. How can I pass the image variable along to the ImageryServiceGetMapUriCompleted method?

using System;
using System.Windows.Controls;
using System.Windows.Media.Imaging;
using BasicBingMapsImagerySvc.ImageryService;

namespace BasicBingMapsImagerySvc
    public partial class MainPage : UserControl
        private const string BingMapsKey = "my key";

        private Image _currentImage;

        public MainPage()

            GetMap(42.573377, -101.032251, image0, MapStyle.AerialWithLabels);

            GetMap(42.573377, -101.032251, image1, MapStyle.Road_v1);

        private void GetMap(double lat, double lon, Image image, MapStyle mapStyle)
            var mapUriRequest = new MapUriRequest();

            // Set credentials using a valid Bing Maps key
            mapUriRequest.Credentials = new Credentials();
            mapUriRequest.Credentials.ApplicationId = BingMapsKey;

            // Set the location of the requested image
            mapUriRequest.Center = new Location();
            mapUriRequest.Center.Latitude = lat;
            mapUriRequest.Center.Longitude = lon;

            // Set the map style and zoom level
            var mapUriOptions = new MapUriOptions();
            mapUriOptions.Style = mapStyle;
            mapUriOptions.ZoomLevel = 13;

            // Set the size of the requested image to match the size of the image control
            mapUriOptions.ImageSize = new SizeOfint();
            mapUriOptions.ImageSize.Height = 256;
            mapUriOptions.ImageSize.Width = 256;

            mapUriRequest.Options = mapUriOptions;

            var imageryService = new ImageryServiceClient("BasicHttpBinding_IImageryService");
            imageryService.GetMapUriCompleted += ImageryServiceGetMapUriCompleted;

            _currentImage = image;



        private void ImageryServiceGetMapUriCompleted(object sender, GetMapUriCompletedEventArgs e)
            // The result is an MapUriResponse Object
            MapUriResponse mapUriResponse = e.Result;
            var bmpImg = new BitmapImage(new Uri(mapUriResponse.Uri));

            _currentImage.Source = bmpImg;
share|improve this question
Anyone needing the answer to this can get it here:… – Stonetip Jul 11 '11 at 14:38

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.

Browse other questions tagged or ask your own question.