【发布时间】:2016-10-18 21:09:24
【问题描述】:
我正在尝试将我在 Windows Phone 8 上运行的简单应用移植到通用 Windows。在构建主框架/页面之前,我需要(本地)加载一些文件,因为这些文件首先指示如何创建页面。有一个 .XML 和一些内容文件是资产的一部分。
我曾经在 App.Application_Launching() 期间进行初始化,现在我猜它已被 App.OnLaunched() 取代。问题在于新的仅异步文件 IO,我似乎无法找到一个可以在程序不挂起的情况下调用任何异步 API 的地方。看来App.OnLaunched()、MainPage.MainPage()、MainPage.OnNavigatedTo()等的任何地方都不能用await。
我基本上必须启动一个后台线程来安排一个任务稍后运行以进行实际初始化,然后回调到 MainPage 的池中以使某些东西正确运行。生成的代码如下所示。似乎过于复杂,但我想这是正确的?
谢谢, 尼克。
public partial class MainPage : Page
{
// Constructor
public MainPage()
{
InitializeComponent();
// This doesn't work ...
// var task = InitAsync();
// task.Wait()
// This seems to ...
IAsyncAction asyncAction = ThreadPool.RunAsync((workItem) =>
{
var ignored = Windows.ApplicationModel.Core.CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
{
TryInitAsync();
});
});
}
private async void TryInitAsync()
{
try
{
await InitAsync();
}
catch
{
int foo = 0;
}
}
private async Task<Boolean> InitAsync()
{
// Things that go await in the night
// Other things that update the layout
return true;
}
}
【问题讨论】:
标签: c# asynchronous windows-10-universal