2016-10-02 4 views
0

Я пытаюсь загрузить некоторые данные (из файла конфигурации) при запуске. Единственный способ доступа к файлу в win 10 uwp - использовать метод async.uwp loading config из файла при запуске

Отлично, но:

Как can'I вызвать метод асинхронной в конструкторе (это не возможно, я знаю) или какой-либо эквивалент. Вот мой фактический код.

sealed partial class App : Application 
{ 

    public ITrackThatContext Context { get; private set; }   
    public App() 
    { 
     this.InitializeComponent(); 
     this.Suspending += OnSuspending; 

     Context = await LocalFileTrackThatContext.CreateAsync(null); 
    } 
} 

Я могу назвать Context = await LocalFileTrackThatContext.CreateAsync(null); от кнопки на первой странице приложения, но я уверен, что лучше делать. Есть ли точка входа для запуска задачи из процесса запуска. Я читал startup stages, но я не могу понять, где загрузить мой конфиг.

ответ

1

В то время как могут быть другие места, наиболее удобным является метод OnNavigatedTo первой загружаемой страницы.

EDIT: Если вам нужно, чтобы это было сделано только один раз, когда у вас может быть одна страница с только Frame внутри, из которой вы затем переходите на другие страницы. Или вы можете где-нибудь сохранить значение bool, будет ли операция завершена или нет, и действовать на основе этого.

+0

'OnNavigateTo' не является асинхронным? Разве я не понял ваш ответ? – tschmit007

+0

@ tschmit007 Это может быть асинхронно, как и любой другой метод, когда вы просто добавляете слово async, когда вы его переопределяете. Но конструкторы не могут быть асинхронными, поскольку они не являются методами. –

+0

@ tschmit007 использовать OnNavigateTo лучше. – lindexi

1

Определить метод обратного вызова и предусматривают, что для Task.ContinueWith():

LocalFileTrackThatContext.CreateAsync(null).ContinueWith(contextLoaded); 

В этом случае, остальная часть конструкторы следует считать контекст еще не установлен - все, что нужно ждать, пока контекст не будет известное произойдет в обратном вызове.

Метод обратного вызова передается аргументом Task, и он может получить .Result и .Status оттуда.

+0

ty для «astuce», чтобы избежать асинхронного вызова. Но не (мое) решение – tschmit007

+0

Не использовать файл read в конструкторе. – lindexi