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

Posted

技术标签:

【中文标题】UWP 从后台任务设置锁屏/壁纸【英文标题】:UWP Set Lockscreen/Wallpaper from Background Task 【发布时间】:2015-09-23 09:46:23 【问题描述】:

有没有办法从Background Task 设置锁屏或壁纸图像?我有以下代码:

if (await UserProfilePersonalizationSettings.Current.TrySetWallpaperImageAsync(file)) 
    Debug.WriteLine("Live wallpaper set!");
 else 
    Debug.WriteLine("Live wallpaper failed to set...");

这在我在应用程序中正常执行时有效,但当我从 Background Task 执行时无效——第一行之后的断点永远不会被命中,表明另一个同步/死锁问题 (see my previous post on a similar issue)。该线程中的修复对我也不起作用(它总是返回false):

bool success = UserProfilePersonalizationSettings.Current.TrySetWallpaperImageAsync(file).GetResults(); // Try GetResults()... ALWAYS returns false

bool success = Task.Run(async () => 
    return await UserProfilePersonalizationSettings.Current.TrySetWallpaperImageAsync(file);
).Result; // ALWAYS returns false...

我有什么遗漏吗(可能无法从Background Task 拨打TrySetWallpaperImageAsync)?

任何帮助将不胜感激,谢谢!

【问题讨论】:

【参考方案1】:

确保您是否正在运行已注册的后台任务。 并且在 Run 方法和后续方法中确保使用

BackgroundTaskDeferral deferral = taskInstance.GetDeferral();

您不必将.GetResults() 用于TrySetWallpaperImageAsync(),因为它默认返回一个布尔值。

【讨论】:

感谢您的帮助。我有一个async void 方法,我在Run 方法中不是awaiting。用AsyncInfo.Run 更改为IAsyncOperation<bool>,现在一切正常。菜鸟错误:)

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

在后台任务中设置壁纸

处理来自后台任务的 toast 通知动作触发器 - UWP

UWP:后台任务中的音频媒体捕获

UWP 后台任务系统关闭

没有锁屏的时间触发后台任务。(WinRT)

UWP:请求启动后台任务时出错