C#在单独的类中调用异步void

时间:2018-09-05 12:45:38

标签: c# uwp

我的一些代码目前存在以下问题。

我的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必须是一个异步函数。我只是不确定如何再通过另一个类调用它?

我是在俯视细小的东西吗,还是我完全处于错误的位置?

1 个答案:

答案 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();
}