等待 DependencyProperty 的默认值
awaiting default value of DependencyProperty
我有 DependencyProperty
个 StorageFolder
类型:
public StorageFolder FolderForVideos
{
get { return (StorageFolder)GetValue(FolderForVideosProperty); }
set { SetValue(FolderForVideosProperty, value); }
}
public static readonly DependencyProperty FolderForVideosProperty =
DependencyProperty.Register("FolderForVideos", typeof(StorageFolder), typeof(MyControl), new PropertyMetadata(null);
我需要 FolderForVideo
的默认值作为视频保存文件夹:
StorageFolder folder= (await StorageLibrary.GetLibraryAsync(KnownLibraryId.Videos)).SaveFolder;
等待是这里的问题。因为显然我不能使用类似的东西:
public static readonly DependencyProperty FolderForVideosProperty =
DependencyProperty.Register("FolderForVideos", typeof(StorageFolder), typeof(MyControl), new
PropertyMetadata((await StorageLibrary.GetLibraryAsync(KnownLibraryId.Videos)).SaveFolder));
因为Error CS1992 The 'await' operator can only be used when contained within a method or lambda expression marked with the 'async' modifier FrameByFramePlayer C:\Users\toted\Desktop\Repos\videodetpl\FrameByFramePlayer\Custom\CameraControl.xaml.cs 110 Active
如何从异步操作中设置依赖项 属性 的默认值?
让我谈谈我对这个问题的看法。
让我们暂时忘记 DependencyProperty
。你想要实现的是在静态对象初始化期间调用异步函数。
static ComplexObject co = new ComplexObject(await GetSomeValueAsync());
一般来说,为一个对象分配 space 应该是快速且尽可能没有错误的。只有在出于任何原因拒绝分配时才应抛出错误。
假设您正在同步调用异步代码(请不要那样做,这只是为了演示目的):
static ComplexObject co = new ComplexObject(GetSomeValueAsync().GetAwaiter().GetResult());
如果您的I/O相关操作失败怎么办?如果需要几分钟才能得到响应怎么办?无论哪种情况,您都违反了对象分配的承诺。
我建议考虑注入默认文件夹的替代方法:
- 如果环境特定,则在部署期间
- 在启动期间,如果来自配置
- 在构建期间,如果它可以是常量或来自资源文件
我有 DependencyProperty
个 StorageFolder
类型:
public StorageFolder FolderForVideos
{
get { return (StorageFolder)GetValue(FolderForVideosProperty); }
set { SetValue(FolderForVideosProperty, value); }
}
public static readonly DependencyProperty FolderForVideosProperty =
DependencyProperty.Register("FolderForVideos", typeof(StorageFolder), typeof(MyControl), new PropertyMetadata(null);
我需要 FolderForVideo
的默认值作为视频保存文件夹:
StorageFolder folder= (await StorageLibrary.GetLibraryAsync(KnownLibraryId.Videos)).SaveFolder;
等待是这里的问题。因为显然我不能使用类似的东西:
public static readonly DependencyProperty FolderForVideosProperty =
DependencyProperty.Register("FolderForVideos", typeof(StorageFolder), typeof(MyControl), new
PropertyMetadata((await StorageLibrary.GetLibraryAsync(KnownLibraryId.Videos)).SaveFolder));
因为Error CS1992 The 'await' operator can only be used when contained within a method or lambda expression marked with the 'async' modifier FrameByFramePlayer C:\Users\toted\Desktop\Repos\videodetpl\FrameByFramePlayer\Custom\CameraControl.xaml.cs 110 Active
如何从异步操作中设置依赖项 属性 的默认值?
让我谈谈我对这个问题的看法。
让我们暂时忘记 DependencyProperty
。你想要实现的是在静态对象初始化期间调用异步函数。
static ComplexObject co = new ComplexObject(await GetSomeValueAsync());
一般来说,为一个对象分配 space 应该是快速且尽可能没有错误的。只有在出于任何原因拒绝分配时才应抛出错误。
假设您正在同步调用异步代码(请不要那样做,这只是为了演示目的):
static ComplexObject co = new ComplexObject(GetSomeValueAsync().GetAwaiter().GetResult());
如果您的I/O相关操作失败怎么办?如果需要几分钟才能得到响应怎么办?无论哪种情况,您都违反了对象分配的承诺。
我建议考虑注入默认文件夹的替代方法:
- 如果环境特定,则在部署期间
- 在启动期间,如果来自配置
- 在构建期间,如果它可以是常量或来自资源文件