我的一些代码目前存在以下问题。
我的UWP C#项目中有一个名为 FileHandling 的文件夹。该文件夹中有一个名为 OpenFileClass.cs
的类。在 OpenFileClass 中,我有一个异步void,它允许触发openFileDialog。的代码如下:
public async void OpenFile_ClickAsync(object sender, RoutedEventArgs e)
{
FileOpenPicker openPicker = new FileOpenPicker
{
ViewMode = PickerViewMode.List,
SuggestedStartLocation = PickerLocationId.DocumentsLibrary
};
openPicker.FileTypeFilter.Add(".txt");
openPicker.FileTypeFilter.Add(".csv");
StorageFile file = await openPicker.PickSingleFileAsync();
if (file != null)
{
// Application now has read/write privelages for selected file
}
else
{
// Cancel operation and resume program
}
}
在 MainPage.xaml.cs 上,我试图通过执行以下操作来调用函数OpenFile_ClickAsync:
using BS.FileHandling;
private void OpenFile_Click(object sender, RoutedEventArgs e)
{
OpenFileClass.OpenFile_ClickAsync();
}
AppBarButton 上有一个控件,该控件具有 ClickMode =“ Press” 和“ Click = OpenFile_Click” ,应在其中触发该功能 MainPage.xaml.cs
现在,这是我的新手,学习起来很缓慢,但是我很确定openFileDialog必须是一个异步函数。我只是不确定如何再通过另一个类调用它?
我是在俯视细小的东西吗,还是我完全处于错误的位置?
答案 0 :(得分:1)
OpenFileClass
应该包含一个打开文件的方法,并且可能还会返回一个文件。它不应包含任何事件处理程序。它可能看起来像这样:
public class OpenFileClass
{
public async Task<IStorageFile> OpenFileAsync()
{
FileOpenPicker openPicker = new FileOpenPicker
{
ViewMode = PickerViewMode.List,
SuggestedStartLocation = PickerLocationId.DocumentsLibrary
};
openPicker.FileTypeFilter.Add(".txt");
openPicker.FileTypeFilter.Add(".csv");
return await openPicker.PickSingleFileAsync();
}
}
请注意,根据约定,该方法名为* Async,并返回Task
。异步方法不应返回void
-事件处理程序除外。
然后您可以在整个应用程序中使用此方法,只需创建类的实例并等待OpenFileAsync()
方法:
private async void OpenFile_Click(object sender, RoutedEventArgs e)
{
OpenFileClass instance = new OpenFileClass();
IStorageFile file = await instance.OpenFileAsync();
}