WinRT - Получить список файлов и каталогов

0

Есть ли способ получить список файлов/каталогов синхронно с c++ или С# в приложениях Windows Store Apps/windows phone? Все примеры асинхронно.

  • 2
    Почему вы хотите, чтобы это было синхронно? Любая задержка менее 50 мс приведет к тому, что приложение не пройдет сертификацию AFAIK.
  • 0
    Задержка больше, чем под, я думаю, вы имеете в виду
Показать ещё 1 комментарий
Теги:
windows-runtime
windows-8.1
windows-phone-8.1

2 ответа

0
Лучший ответ

Сомнение от этого вопроса работало на меня: как бы я запускал метод async Task <T> синхронно?

    var task = Task.Run(async () => { await ... });
    task.Wait();

Образец из этой статьи также отлично работает. http://mtaulty.com/CommunityServer/blogs/mike_taultys_blog/archive/2013/02/22/windows-8-winrt-storagefolder-hidden-files-net-c-appcontainers-brokering.aspx

ps Я забыл упомянуть, что мне нужно синхронно читать список файлов /dirs для моей c++ игры, а не приложения. Я переношу существующий код из iphone/android, поэтому есть некоторые места, которые зависят от результата от функции.

0

В большинстве случаев вы захотите сделать это асинхронно. Пользователям это не нравится, когда пользовательский интерфейс приложения зависает, а система ожидания пытается сделать асинхронное программирование настолько плавным, насколько это возможно, поэтому вам не нужно реализовывать значительные количества настраиваемого кода, чтобы поддерживать приложение в обратном порядке.

Тем не менее, для случаев, которые вряд ли окажут значительное влияние на отзывчивость, вы можете пойти синхронно:

Если файлы находятся в папках данных установки или приложения, приложение может получить к ним доступ со стандартным API-интерфейсом C++. Приложение не будет иметь разрешений для файлов в других местах для этого и будет необходимо использовать асинхронный API StorageItem (StorageFolders and StorageFiles)

Если приложение вызывает StorageItem из фонового потока, он может синхронно дождаться завершения асинхронной опции. Приложение не может блокировать поток пользовательского интерфейса таким образом, хотя: Task.Wait не работает в потоке пользовательского интерфейса.

var thread = myFolder.GetFilesAsync().AsTask();
thread.Wait();

Ещё вопросы

Сообщество Overcoder
Наверх
Меню