C#将额外参数传递给事件

时间:2013-02-01 13:36:45

标签: c#

我想将三个额外的参数传递给事件:

geocodeService.GeocodeCompleted += new EventHandler<GeocodeService.GeocodeCompletedEventArgs>(geocodeService_GeocodeCompleted);

参数是

  • int id
  • string color
  • double heading

    private void Geocode(string strAddress, int waypointIndex, int id, string color, double heading)
    {
    
    
        // Create the service variable and set the callback method using the GeocodeCompleted property.
        GeocodeService.GeocodeServiceClient geocodeService = new GeocodeService.GeocodeServiceClient("BasicHttpBinding_IGeocodeService");
    
        // NEED TO PASS id, color, heading TO THIS EVENT HANDLER
        geocodeService.GeocodeCompleted += new EventHandler<GeocodeService.GeocodeCompletedEventArgs>(geocodeService_GeocodeCompleted);
    
        GeocodeService.GeocodeRequest geocodeRequest = new GeocodeService.GeocodeRequest();
        geocodeRequest.Credentials = new Credentials();
        geocodeRequest.Credentials.ApplicationId = ((ApplicationIdCredentialsProvider)BingMap.CredentialsProvider).ApplicationId;
        geocodeRequest.Query = strAddress;
        geocodeService.GeocodeAsync(geocodeRequest, waypointIndex);
    }
    
    
    private void geocodeService_GeocodeCompleted(object sender, GeocodeService.GeocodeCompletedEventArgs e)
    {
        GeocodeResult result = null;
    
        if (e.Result.Results.Count > 0)
        {
            result = e.Result.Results[0];
            if (result != null)
            {
                // this.ShowMarker(result);
                this.ShowShip(result);
    
    
            }
        }
    
    }
    

2 个答案:

答案 0 :(得分:0)

您可以扩展GeocodeService.GeocodeServiceClient添加这些属性,然后在事件方法geocodeService_GeocodeCompleted中使用sender参数:

var service = (GeocodeService.GeocodeServiceClient) sender;

快速和脏(IMHO)版本是使用lambda表达式:

Pass parameter to EventHandler

答案 1 :(得分:0)

看起来GeocodeCompletedEventArgs延伸AsyncCompletedEventArgsAsyncCompletedEventArgs具有属性UserState,可用于存储异步事件的状态信息。此状态通常作为参数传递给引发事件的方法。

有关详细信息,请参阅此问题:Bing GeocodeService userState usage as custom additional parameter