我想在后台任务中从存储文件夹中获取所有图像。 首先在app_entering后台方法中注册后台任务。 我也可以调试Run方法,但没有await方法正常工作 -
public void Run(IBackgroundTaskInstance taskInstance)
{
var differal = taskInstance.GetDeferral();
UpdateUI();
differal.Complete();
}
public async void UpdateUI()
{
StorageFolder folder = await KnownFolders.PicturesLibrary.GetFolderAsync("Wall_e_photos")//here execution stops and backgroundtaskhost exits.
var files = await GetFilesAsync();
foreach (StorageFile file in files)
{
if (file.Name.Contains("wall_e"))
{
}
}
}
长时间挣扎..初始后台任务在开始工作后无法正常工作..现在存储文件夹问题(获取文件夹时后台任务退出)。
另外,对于我遵循此链接的说明 - http://www.codeguru.com/win_mobile/win_store_apps/setting-wallpapers-in-a-windows-8-store-app-with-vb.htm
他们使用了调度程序,如果我使用var dispatcher = MyDispatcher = GetForCurrentThread()。Dispatcher,那么它给出了空引用异常
如果我使用Windows.ApplicationModel.Core.CoreApplication.MainView,则它无法创建新的视图异常..
请帮帮我......
答案 0 :(得分:2)
你有一个问题:
var differal = taskInstance.GetDeferral();
UpdateUI();
differal.Complete();
UpdateUI
是一个异步方法,因此方法调用将立即结束(当方法在后台继续执行时)。因此,您需要在工作结束前致电differal.Complete();
。
解决这个问题的一种简单方法是将延迟作为参数传递给UpdateUI
方法,并在最后完成:
public async void UpdateUI(BackgroundTaskDeferral deferral)
{
StorageFolder folder = await KnownFolders.PicturesLibrary.GetFolderAsync("Wall_e_photos")//here execution stops and backgroundtaskhost exits.
var files = await GetFilesAsync();
foreach (StorageFile file in files)
{
if (file.Name.Contains("wall_e"))
{
}
}
deferral.Complete();
}
另一种方法是将UpdateUI
更改为async Task
,然后等待其继续:
public async void Run(IBackgroundTaskInstance taskInstance)
{
var differal = taskInstance.GetDeferral();
await UpdateUI();
differal.Complete();
}
public async Task UpdateUI()
{
...
}