在后台任务中设置壁纸

我想从后台任务中的存储文件夹中获取所有图像。 首先在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,那么它给出了null引用exception

如果我使用Windows.ApplicationModel.Core.CoreApplication.MainView,那么它无法创建新的视图exception..

请帮我…

你有一个问题:

 var differal = taskInstance.GetDeferral(); UpdateUI(); differal.Complete(); 

UpdateUI是一种异步方法,因此方法调用将立即结束(当方法在后台继续执行时)。 因此,您正在调用differal.Complete(); 在工作结束之前。

解决这个问题的一种简单方法是将UpdateUI作为参数传递给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() { ... }