Mvvm light RelayCommand
me cause un peu de mal de tête avec async
méthodes. bouton WPF est à égalité avec la RelayCommand suivante:RelayCommand et la méthode asynchrone qui en résulte: "'System.Reflection.TargetInvocationException" s'est produite dans mscorlib.dll "
private RelayCommand _importDeviceCommand;
/// <summary>
/// Import device button for SelectDeviceView.
/// </summary>
public RelayCommand ImportDeviceCommand
{
get
{
return _importDeviceCommand
?? (_importDeviceCommand = new RelayCommand(async() => await AddDeviceClickExecute(),
() => _selectedCableType != null
&& _selectedAddDevice != null
&& _selectedPointNames != null
&& _selectedPointNames.Any()));
}
}
Je suis probablement abusant sous une forme parce que garder la rencontre de temps en temps l'exception suivante toujours lorsque la méthode AddDeviceClickExecute
est fait.
Une exception non gérée du type 'System.Reflection.TargetInvocationException' est produite dans mscorlib.dll
- Quelles sont les solutions possibles?
- Pourrait-il avoir quelque chose à voir avec les appels de méthode lambda?
- Par conséquent, comment est-ce que je peux refactoriser la commande de relais de telle sorte que aucun lambda n'est employé?
EDIT 1
La méthode appelée async, le try/catch est malheureusement pas fait une différence?
private async Task AddDeviceClickExecute()
{
_linkTheSocket = true;
var deviceImporter = new DeviceImporterAsync2(_projectContext, _deviceContext);
var progress = new Progress<string>(status =>
{
_importDeviceProgress = status;
RaisePropertyChanged("ImportDeviceProgress");
});
try
{
await deviceImporter.InvokeSimpleDeviceImport(UserSelectedSockets, progress);
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString(), "Exception during simple device import", MessageBoxButton.OK, MessageBoxImage.Error);
}
}
EDIT 2
L'exception suivante se produit juste après les sorties AddDeviceClickExecute
.
EDIT 3
Tourné que la façon dont j'utilisait async et RelayCommand avait rien à voir avec mon exception. Le problème a été résolu.
Il est rarement utile de dire quelque chose de 'TargetInvocationException' sans vérifier son 'InnerException'. –
'InnerException' est vide ou je ne sais pas comment le voir. Sur les paramètres d'exception, j'ai activé les (Common Language Runtime Exections) J'utilise Visual Studio 2015. – ajr
Vous pourriez avoir un peu de chance d'arriver à l'erreur réelle en faisant Visual Studio break au débogueur dès que l'exception est levée. Vous pouvez le faire à partir de la fenêtre d'exception, il suffit de cocher "Common Language Runtime", puis faites l'erreur. Assurez-vous de l'éteindre lorsque vous avez terminé, ce comportement peut devenir très ennuyeux. https://blogs.msdn.microsoft.com/visualstudioalm/2015/02/23/the-new-exception-settings-window-in-visual-studio-2015/ –