在后台任务中设置壁纸

Posted

技术标签:

【中文标题】在后台任务中设置壁纸【英文标题】:Setting a wallpaper in background task 【发布时间】:2017-11-20 04:32:41 【问题描述】:

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

请帮帮我...

【问题讨论】:

请详细说明“存储文件夹问题”的含义。您是否遇到异常或其他情况? 如果你想回答请帮忙..请不要投反对票..问题没有错..该行没有任何反应它只是停止执行并且不会继续下一行..否没有异常...在输出窗口背景主机退出(已经提到) 该问题没有足够的信息,所以请更新它,以便其他人知道您面临的问题。我看不到您在后台任务无一例外地退出的问题中提到的位置。努力帮助您提出好的问题,以便您从社区中获得好的答案。 您是否在应用的清单中声明了“图片库”功能? 对不起,错过了代码sn-p中的注释。我的错! (现在编辑帖子和投票) 【参考方案1】:

你有一个问题:

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

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

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

    ...

【讨论】:

感谢您的回复....在第一种方法中..如果我使用 deferral.Complete();在 UpdateUI 方法结束时..会触发工作..我的意思是它会在 15 分钟后再次运行 抱歉..我问是因为..它没有发生......在 deferal.complete..它没有调用 backgroundtask 它将在大约 1 分钟后再次运行。如果您已将 TimeTrigger 注册为重复任务,则需要 15 分钟:docs.microsoft.com/en-us/uwp/api/… 非常感谢大家帮助我...我会接受这个作为答案,因为这确实对我有帮助,尽管对此的实际解决方案是(至少对我而言)在 requestaccessasync-BackgroundExecutionManager 之前添加这一行。 RemoveAccess()....再次感谢

以上是关于在后台任务中设置壁纸的主要内容,如果未能解决你的问题,请参考以下文章

UWP 从后台任务设置锁屏/壁纸

是否可以在Stream.parallel()中设置线程的优先级?

如何使用后台服务在android中设置提醒?

如何在后台和用户注册中设置角色

如何在 Android Studio 中使用 AsyncTask 从可绘制对象中设置图像

django中设置定时任务