【发布时间】:2015-10-13 11:55:56
【问题描述】:
我正在使用 WPF 和 MVVM 开发一个异步应用程序,但我似乎无法在我的中继命令中运行异步方法。
我的 WPF view 上有一个按钮连接到我的 viewmodel 中的中继命令,它尝试在我的 model 中调用异步方法> 返回结果列表:
/// <summary>
/// Search results
/// </summary>
private ObservableCollection<string> _searchResults = new ObservableCollection<string>();
public IList<string> SearchResults
{
get { return _searchResults; }
}
/// <summary>
/// Search button command
/// </summary>
private ICommand _searchCommand;
public ICommand SearchCommand
{
get
{
_searchCommand = new RelayCommand(
async() =>
{
SearchResults.Clear();
var results = await DockFindModel.SearchAsync(_selectedSearchableLayer, _searchString);
foreach (var item in results)
{
SearchResults.Add(item);
}
//notify results have changed
NotifyPropertyChanged(() => SearchResults);
},
() => bAppRunning); //command will only execute if app is running
return _searchCommand;
}
}
但是,当中继命令尝试执行时,我得到以下异常:
在 mscorlib.dll 中发生“System.AggregateException”类型的未处理异常
附加信息:也未观察到任务的异常 通过等待任务或访问其异常属性。作为一个 结果,未观察到的异常被终结器线程重新抛出。
我在this thread 中尝试了很多方法来尝试解决问题,但没有成功。有谁知道如何解决这个问题?
【问题讨论】:
-
内部异常是什么?
-
你的 RelayCommand 是什么样的?
-
修复了!无论如何,谢谢各位。
-
修好了还是躲过了?
-
我知道我在这里唤醒了一个旧线程,但您不应该等待 lambda 函数吗?我会尝试将
async() =>更改为async() => await。
标签: c# wpf mvvm async-await