c# - 与 WPF 属性异步

标签 c# wpf async-await

我有一个这样的绑定(bind)属性:

public string MyPath
{
    get { return _mypath; }
    set
    {
        _mypath = value;
        NotifyPropertyChanged(() => MyPath);
        LoadSomeStuffFromMyPath(mypath)
    }
}

我想要使 LoadSomeStuffFromMyPath 异步,但我无法等待某个属性。有没有简单的方法可以做到这一点?

编辑:不止一个人说过不要使用某个属性,所以我想指出这一点。我正在使用 WPF 并且此属性绑定(bind)到 UI。我必须使用属性。

最佳答案

既然你想强制操作在完成之前不继续,我建议创建一个方法来处理加载和显示你的进度。

您可以在加载时使用一个单独的属性来禁用 UI,这可以有效地“阻止”您的用户,直到操作完成:

public string MyPath
{
    get { return _mypath; }
    set
    {
        _myPath = value;
        NotifyPropertyChanged(() => MyPath);
        UpdateMyPathAsync();
    }
}

public async Task UpdateMyPathAsync()
{
    this.EnableUI = false; // Stop user from setting path again....
    await LoadSomeStuffFromMyPathAsync(MyPath); 
    this.EnableUI = true;
}

这允许您仍然像往常一样与 WPF 绑定(bind),但让您的 UI 反射(reflect)操作正在运行(异步)并显示进度等。

关于c# - 与 WPF 属性异步,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19550402/

相关文章:

c# - WebRequest 不工作

wpf - 以编程方式获取 RowDefinition 高度

c# - 您可以使用 Task.Run 将受 CPU 限制的工作移至后台线程

.net - 当 .NET 4.5 中任务异步中的任何方法永远不会完成时

c# - struct c#中的安全固定大小数组

c# - 在 C# 中将字符串转换为整数时出现异常

wpf - DataGrid 绑定(bind)到 List<int?>

entity-framework - 如何在异步存储库方法中返回空的 IQueryable

c# - 将 IEnumerable<T> 导出到 Excel

c# - 将色带控件与 Caliburn Micro 接口(interface)的好方法是什么?