Выполнить синхронную операцию в потоке пользовательского интерфейса
Я пытаюсь разработать приложение для Windows и столкнуться с проблемами. У меня есть MainPage.xaml и еще 2 StartScreen.xaml и Player.xaml. Я переключаю содержимое главной страницы, если выполняются определенные условия. Таким образом, у меня есть событие в StartScreen, оно проверяет, существует ли каталог, или нет, но каждый раз выдает ошибку.
private void GoToPlayer_Click(object sender, RoutedEventArgs e)
{
if (Directory.Exists(this.main.workingDir + "/" + IDText.Text + "/Tracks")) // Error occurs here
{
this.main.Content = this.main.player; //here i switch between different ui forms
}
else
{
MessageBox.Text = "CD not found";
IDText.Text = "";
}
}
Когда он попадает в ветку else, все в порядке, но когда каталог доступен, я получаю следующее сообщение об ошибке:
An exception of type 'System.InvalidOperationException' occurred in System.IO.FileSystem.dll but was not handled in user code
Дополнительная информация: синхронные операции не должны выполняться в потоке пользовательского интерфейса. Попробуйте обернуть этот метод в Task.Run.
Даже если я комментирую код в ветке if, ошибка все равно приходит.
Я попробовал это:
private async void GoToPlayer_Click(object sender, RoutedEventArgs e)
{
await this.Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () => {
if (Directory.Exists(this.main.workingDir + "/" + IDText.Text + "/Tracks")) // Error occurs here
{
this.main.Content = this.main.player; //here i switch between different ui forms
}
else
{
MessageBox.Text = "CD not found";
IDText.Text = "";
}
});
}
Все та же ошибка, как я понял, она должна выполняться асинхронно и ждать, пока код не завершится, но это не так. Я также пробовал кучу других вещей, но все равно получаю ошибки. Я не знаю, как это исправить, может кто-нибудь объяснить, почему это происходит и как это исправить.