This should work in v100. What event are you using and what's e.GetPosition(MainMapView)'s value when you get this error?
var position = e.GetPosition(MainMapView);
System.Diagnostics.Debug.WriteLine(position.ToString());
You can also try the following code. Using GeoViewTapped, you can pass either specific layer or identify all layers. In the identified result, notice that ArcGISMapImageLayer have results in SublayerResults and FeatureLayer have results in GeoElements.
xmlns:esri="http://schemas.esri.com/arcgis/runtime/2013">
<Grid>
<esri:MapView x:Name="MyMapView" GeoViewTapped="MyMapView_GeoViewTapped">
<esri:Map>
<esri:ArcGISMapImageLayer Source="http://sampleserver6.arcgisonline.com/arcgis/rest/services/USA/MapServer" />
<esri:FeatureLayer>
<esri:ServiceFeatureTable Source="http://sampleserver6.arcgisonline.com/arcgis/rest/services/Notes/FeatureServer/0" />
</esri:FeatureLayer>
</esri:Map>
</esri:MapView>
</Grid>
private async void MyMapView_GeoViewTapped(object sender, GeoViewInputEventArgs e)
{
try
{
Layer layer = null;
layer = MyMapView.Map.AllLayers.OfType<ArcGISMapImageLayer>().FirstOrDefault();
var identifyResult = await MyMapView.IdentifyLayerAsync(layer, e.Position, 1, false, 1);
DisplayResult(identifyResult);
layer = MyMapView.Map.AllLayers.OfType<FeatureLayer>().FirstOrDefault();
identifyResult = await MyMapView.IdentifyLayerAsync(layer, e.Position, 1, false, 1);
DisplayResult(identifyResult);
var identifyResults = await MyMapView.IdentifyLayersAsync(e.Position, 1, false, 1);
foreach (var result in identifyResults)
DisplayResult(result);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
private string GetGeoElements(IEnumerable<GeoElement> geoElements)
{
var sb = new StringBuilder();
foreach (var g in geoElements)
foreach (var a in g.Attributes)
sb.AppendLine($"{a.Key}={a.Value}");
return sb.ToString();
}
private string GetSublayerResult(IEnumerable<IdentifyLayerResult> sublayerResults)
{
var sb = new StringBuilder();
foreach (var r in sublayerResults)
{
sb.AppendLine($"{r.LayerContent.Name} has {r.GeoElements.Count} results");
var summary = GetGeoElements(r.GeoElements);
if (!string.IsNullOrEmpty(summary))
sb.AppendLine(summary);
}
return sb.ToString();
}
private void DisplayResult(IdentifyLayerResult result)
{
var sb = new StringBuilder();
var summary = GetGeoElements(result.GeoElements);
if (!string.IsNullOrEmpty(summary))
sb.AppendLine(summary);
summary = GetSublayerResult(result.SublayerResults);
if (!string.IsNullOrEmpty(summary))
sb.AppendLine(summary);
summary = sb.ToString();
if(!string.IsNullOrEmpty(summary))
MessageBox.Show(summary);
}