Я разрабатываю приложение в WinUI 3, и мне нужно открыть диалоговое окно выбора папки. Для этого я посетил документацию и страницы GitHub, и вот что я написал (PrincipalPage.xaml.cs):
(...)
private async void Select_Click(object sender, Microsoft.UI.Xaml.RoutedEventArgs e)
{
var task = SelectFile();
await task;
}
public async Task SelectFile()
{
var folderPicker = new FolderPicker();
var hwnd = WinRT.Interop.WindowNative.GetWindowHandle(this);
WinRT.Interop.InitializeWithWindow.Initialize(folderPicker, hwnd);
folderPicker.FileTypeFilter.Add("*");
var file = await folderPicker.PickSingleFolderAsync();
storePath = file.Path;
DestinationURLTextBox.Text = file.Path;
}
(...)
Я пытался найти, что я делаю неправильно, и даже пытался поместить код непосредственно в метод нажатия кнопки, но ничего не изменилось.
Это внешний конфиг или... просто я что-то не так делаю?
@CodeCaster Мне было предложено выбрать отладчик JIT, и я выбрал единственный доступный (новый экземпляр VS 2022), а затем получил «Невозможно подключиться к процессу сбоя. Отладчик уже подключен». Затем он просто закрыл экземпляр и вернулся к коду.





Поскольку этот код находится в Page(PrincipalPage.xaml.cs), вы передаете Page в GetWindowHandle. Вам нужно пройти Window.
Вы можете сделать это таким образом.
App.xaml.cs
public partial class App : Application
{
public Window? MainWindow { get; private set; }
public App()
{
this.InitializeComponent();
}
protected override void OnLaunched(Microsoft.UI.Xaml.LaunchActivatedEventArgs args)
{
MainWindow = new MainWindow();
MainWindow.Activate();
}
}
PrincipalPage.xaml.cs
public sealed partial class PrincipalPage: Page
{
public BlankPage1()
{
this.InitializeComponent();
}
private async void Select_Click(object sender, RoutedEventArgs e)
{
var task = SelectFile();
await task;
}
public async Task SelectFile()
{
var folderPicker = new FolderPicker();
var mainWindow = (App.Current as App)?.MainWindow;
var hwnd = WinRT.Interop.WindowNative.GetWindowHandle(mainWindow);
WinRT.Interop.InitializeWithWindow.Initialize(folderPicker, hwnd);
folderPicker.FileTypeFilter.Add("*");
var file = await folderPicker.PickSingleFolderAsync();
storePath = file.Path;
DestinationURLTextBox.Text = file.Path;
}
}
Цвет указывает на то, что это исключение первого шанса. Что произойдет, если вы продолжите отладку (F5)?