gpt4 book ai didi

c# - 在Ui线程上执行同步操作

转载 作者:行者123 更新时间:2023-11-30 13:55:18 24 4
gpt4 key购买 nike

我正在尝试开发 Windows 应用程序并遇到问题。我有一个 MainPage.xaml 和另外 2 个 StartScreen.xaml 和 Player.xaml。如果某些条件成立,我将切换 MainPage 的内容。所以我在 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

附加信息:不应在 UI 线程上执行同步操作。考虑将此方法包装在 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 = "";
}
});
}

仍然是同样的错误,据我所知,这应该异步运行并等待代码完成,但似乎并非如此。我还尝试了其他一些东西,但仍然出现错误。我不知道如何解决这个问题,有人可以解释为什么会发生这种情况以及如何解决这个问题。

最佳答案

如异常所述,您不能在 UI 线程中同步调用 Directory.Exists。将整个代码块放在 Dispatcher 操作中仍然会在 UI 线程中调用它。

在 UWP 应用程序中,您通常会使用 StorageFolder.TryGetItemAsync 方法来检查文件或文件夹是否存在:

private async void GoToPlayer_Click(object sender, RoutedEventArgs e)
{
var folder = await StorageFolder.GetFolderFromPathAsync(main.workingDir);

if ((folder = await folder.TryGetItemAsync(IDText.Text) as StorageFolder) != null &&
(folder = await folder.TryGetItemAsync("Tracks") as StorageFolder) != null)
{
...
}
}

请注意,当不允许应用程序访问 main.workingDir 时,您仍可能会收到 UnauthorizedAccessException

关于c# - 在Ui线程上执行同步操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35747635/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com