C # Вызов асинхронной пустоты в отдельном классе - PullRequest
0 голосов
/ 05 сентября 2018

У меня есть следующие проблемы с небольшим количеством моего кода в настоящее время.

У меня есть папка с именем FileHandling в моем проекте UWP C #. В этой папке находится класс с именем OpenFileClass.cs

В OpenFileClass у меня есть асинхронная пустота, которая позволяет запускать 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 голосов
/ 05 сентября 2018

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();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...