Avalonia SaveFileDialog冻结应用程序,但OpenFileDialog工作正常



我正在尝试从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()

相关内容

  • 没有找到相关文章