在后台任务中设置壁纸

时间:2017-06-17 13:58:42

标签: c# uwp windows-runtime windows-10

我想在后台任务中从存储文件夹中获取所有图像。 首先在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,则它无法创建新的视图异常..

请帮帮我......

1 个答案:

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