我正在尝试从Avalonia的ReactiveCommand中打开SaveFileDialog
。
public ReactiveCommand<Window, Unit> SaveFileAs { get; } = ReactiveCommand.Create((Window source) =>
{
var path = new SaveFileDialog().ShowAsync(source).Result;
// ...
});
当对话框关闭时,上面的代码冻结。然而,OpenFileDialog
工作如预期。
public ReactiveCommand<Window, Unit> OpenFile { get; } = ReactiveCommand.Create((Window source) =>
{
var paths = new OpenFileDialog().ShowAsync(source).Result;
// ...
});
我还将[STAThread]
应用于main方法(默认从Avalonia MVVM模板)。
// Program.cs
[STAThread]
public static void Main(string[] args) => BuildAvaloniaApp()
.StartWithClassicDesktopLifetime(args);
这种奇怪行为的原因是什么?解决办法是什么?
我认为你代码中的冻结是由Result
引起的。尝试将两个对话框切换到async/await
:
var dlg = new SaveFileDialog();
var result = await dlg.ShowAsync(this);
你可能需要使用CreateFromTask()
而不是同步Create()
。