在后台任务中设置壁纸

Setting a wallpaper in background task

我想在后台任务中获取存储文件夹中的所有图像。 首先在app_entering后台方法中注册了一个后台任务。 我也可以调试 运行 方法,但是 none 的 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"))
                {
                    }

  }
       }

苦苦挣扎了很长时间..最初后台任务不工作,开始工作后..现在存储文件夹问题(获取文件夹时后台任务退出)。

还有一个注释,我遵循了这个 link- 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 ,那么它给出了无法创建新视图的异常..

请帮帮我...

你这里有问题:

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()
{
    ...
}