MvvmライトRelayCommand
はasync
メソッドで頭痛を引き起こしています。 WPFのボタンは、以下のrelayCommandで結ばれている:メソッドAddDeviceClickExecute
が行われたときに、必ず次の例外が発生した時折保つためRelayCommandとasyncメソッドの結果: "'System.Reflection.TargetInvocationException'が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()));
}
}
は、私はおそらく何らかの形でそれを悪用しています。
タイプ 'System.Reflection.TargetInvocationException' の未処理の例外は
- 可能な解決策は何がmscorlib.dllで発生した?
- ラムダメソッド呼び出しと何か関係がありますか?
- したがって、 ラムダを使用しないようにrelayCommandをどのようにリファクタリングできますか?
EDIT 1
と呼ばれる非同期メソッド、のtry/catchは、残念ながら何の違いを作っていませんか?
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
次の例外がAddDeviceClickExecute
終了直後に発生します。
EDIT 3
は、私は非同期とrelayCommandを利用した方法は、私の例外を除いて行うこと 何もしなかったことが判明しました。問題は修正されました。
'InnerException'をチェックせずに' TargetInvocationException'について言われることはめったにありません。 –
'InnerException'が空であるか、それを見る方法がわかりません。例外設定で私はビジュアルスタジオ2015を使用しています(Common Language Runtime Exections)を有効にしました。 – ajr
例外がスローされるとすぐにVisual Studioをデバッガにブレークさせることで、実際のエラーに陥る可能性があります。例外ウィンドウからこれを行うことができます。「Common Language Runtime」にチェックを入れ、エラーを起こさせます。あなたがやったときにそれをオフにしてください、その行動は非常に迷惑になることができます。 https://blogs.msdn.microsoft.com/visualstudioalm/2015/02/23/the-new-exception-settings-window-in-visual-studio-2015/ –