using AIK.Common.Interface; using Ookii.Dialogs.Wpf; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows; namespace AIKKey.Infrastructure { public class WpfFileDialogService : IFileDialogService { public Task OpenFileAsync(string title = "选择文件") { return Task.Run(() => { var dialog = new VistaOpenFileDialog { Title = title, Multiselect = false }; // 必须在 STA 线程(WPF 主线程)运行 return Application.Current.Dispatcher.Invoke(() => { bool? result = dialog.ShowDialog(); return result == true ? dialog.FileName : null; }); }); } public Task SelectFolderAsync(string description = "请选择文件夹") { return Task.Run(() => { var dialog = new VistaFolderBrowserDialog { Description = description, UseDescriptionForTitle = true }; return Application.Current.Dispatcher.Invoke(() => { bool? result = dialog.ShowDialog(); return result == true ? dialog.SelectedPath : null; }); }); } } }