I just upgraded our custom Silverlight application from ArcGIS Silverlight API 2.4 to 3.1. For some reason, one of our geoprocessing tasks is returning a ArgumentNullException, indicating that Parameter name: SpatialReference is null when the async task is executed. I stepped through the code and saw that the spatialreference for one of the parameters was missing, so I assigned it in code but I'm still getting the error. Any ideas? My code is below:private void btnOK_Click(object sender, RoutedEventArgs e)
{
if (graphicsLayerPoly.Graphics.Count == 0)
{
MessageBox.Show("Please click on map to define Observer location.", "Viewshed", MessageBoxButton.OK);
return;
}
LayoutRoot.Cursor = System.Windows.Input.Cursors.Wait;
MapControl.Cursor = Cursors.Wait;
MainPage mainPage = Application.Current.RootVisual as MainPage;
string mapUnits = mainPage.scaleBar.MapUnit.ToString();
List<GPParameter> parameters = new List<GPParameter>();
double h = Convert.ToDouble(txtHeight.Text);
if (cboUnitsH.SelectedItem.ToString().ToUpper() == "FEET" && zUnit.ToUpper() == "METERS") //input FEET to METERS
{
h = h * 0.3048;
}
else if ((cboUnitsH.SelectedItem.ToString().ToUpper() == "METERS" && zUnit.ToUpper() == "FEET")) //input METERS to FEET
{
h = h / 0.3048;
}
GPFeatureRecordSetLayer gpInputPoint = new GPFeatureRecordSetLayer("InputPoint", graphicsLayerPt.Graphics.First().Geometry);
gpInputPoint.FeatureSet.Features.First().Attributes.Add("SPOT", (Convert.ToDouble(h) + Convert.ToDouble(txtHeight.Tag)).ToString());
gpInputPoint.FeatureSet.Features.First().Attributes.Add("OFFSETA", 0);
parameters.Add(gpInputPoint);
GPFeatureRecordSetLayer gpInputArea = new GPFeatureRecordSetLayer("InputPolygon", graphicsLayerPoly.Graphics.First().Geometry);
gpInputArea.FeatureSet.SpatialReference = gpInputPoint.FeatureSet.SpatialReference; //here's where I assigned the spatialreference
parameters.Add(gpInputArea);
double r = Convert.ToDouble(txtRadius.Text);
switch (cboUnitsR.SelectedItem.ToString().ToUpper())
{
case "FEET":
parameters.Add(new GPLinearUnit("Distance", esriUnits.esriFeet, r));
if (xyUnits.ToUpper() == "METERS") r = r * 0.3048; //convert to meters
break;
case "METERS":
parameters.Add(new GPLinearUnit("Distance", esriUnits.esriMeters, r));
if (xyUnits.ToUpper() == "FEET") r = r / 0.3048; //convert to feet
break;
case "MILES":
parameters.Add(new GPLinearUnit("Distance", esriUnits.esriMiles, r));
r = (xyUnits.ToUpper() == "FEET") ? r * 5280 : r * 1609.344; //
break;
default:
MessageBox.Show(string.Format("Invalid Map Units: {0}. FEET, METERS or MILES are valid", cboUnitsR.SelectedItem.ToString().ToUpper()));
break;
}
double cellSize_ReSample = (r / cellSize > pixels / 2) ? r / (pixels / 2) : cellSize;
parameters.Add(new GPString("CellSize", cellSize_ReSample.ToString()));
vsGP viewshedGP = (vsGP)cmbGP.SelectedItem;
_geoprocessorTask = new Geoprocessor(viewshedGP.Url );
_geoprocessorTask.ExecuteCompleted += GeoprocessorTask_ExecuteCompleted;
_geoprocessorTask.Failed += GeoprocessorTask_Failed;
_geoprocessorTask.ExecuteAsync(parameters);
mainPage.busyToggle(true);
}