在后台任务中设置壁纸
我想从后台任务中的存储文件夹中获取所有图像。 首先在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() { ... }