我正在嘗試開發Windows應用程序並遇到問題。 我有一個MainPage.xaml和另外兩個StartScreen.xaml和Player.xaml。 如果某些條件爲真,我將切換MainPage的內容。 因此,我在StartScreen中有一個事件,它檢查一個目錄是否存在,但每次發生錯誤時都會拋出。在UI線程上執行同步操作
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分支一切都很好,但是當DIR可我收到以下錯誤信息:
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 = "";
}
});
}
仍是同樣的錯誤,我的理解這應該是異步運行並等待代碼完成,但它似乎並不如此。我也嘗試了其他的東西,但仍然得到錯誤。 我不知道如何解決這個問題,有人可以解釋爲什麼會發生這種情況,以及如何解決這個問題。