【发布时间】:2017-10-30 00:08:03
【问题描述】:
当我的属性引发 PropertyChanged 事件时,如何运行一些长时间的操作? 示例:
class SomeClass : INotifyPropertyChanged
{
public ObservableConllection<Item> Items { get; set; }
public string Path
{
get => _path;
if (_path != value) {
_path = value;
OnPropertyChanged(nameof(Path));
// await Task.Run(()=> long operation, for example load some Items use "_path");
}
}
属性不能是异步的,我认为这是“正常的”。但是我该怎么办? 我认为这种情况经常发生。
【问题讨论】:
-
您可以插入属性更改事件并在那里执行您的异步任务
-
恕我直言,如果设置属性需要在后台启动长时间运行的方法,您应该考虑将其转换为方法并正确命名。我不希望有这样的副作用。无论如何,如果值快速变化会发生什么。您是否必须中止正在运行的任务?您也必须考虑这一点。
-
尝试将其移动到事件中。例如。加载,用户事件或其他东西并使该事件异步
标签: c# .net wpf async-await task-parallel-library