我正在尝试在BackgroundTask
的C#W10 UWP应用中将图像设置为锁屏或壁纸...我可以在正常执行中做到这一点,但是当我将相同的代码放入BackgroundTask
,代码挂起StorageFile.CreateStreamedFileFromUriAsync
。
// See if file exists already, if so, use it, else download it
StorageFile file = null;
try {
file = await ApplicationData.Current.LocalFolder.GetFileAsync(name);
} catch (FileNotFoundException) {
if (file == null) {
Debug.WriteLine("Existing file not found... Downloading from web");
file = await StorageFile.CreateStreamedFileFromUriAsync(name, uri, RandomAccessStreamReference.CreateFromUri(uri)); // hangs here!!
file = await file.CopyAsync(ApplicationData.Current.LocalFolder);
}
}
// Last fail-safe
if (file == null) {
Debug.WriteLine("File was null -- error finding or downloading file...");
} else {
// Now set image as wallpaper
await UserProfilePersonalizationSettings.Current.TrySetLockScreenImageAsync(file);
}
StorageFile
BackgroundTasks
是否有任何我不知道的限制?一些谷歌搜索没有产生这样的限制......
有什么想法吗?
感谢。
答案 0 :(得分:1)
"代码挂起"意思?例外?开始操作但不会完成/返回? 我曾经(或者,我还在努力)类似的问题,或者至少我认为它是相似的。
可能它是一个异步配置上下文问题。
//not tested...but try ...AsTask().ConfigureAwait(false):
file = await StorageFile.CreateStreamedFileFromUriAsync(name, uri, RandomAccessStreamReference.CreateFromUri(uri)).AsTask().ConfigureAwait(false);
修改强> 开始,但不会返回(下一行代码中没有命中断点),声音仍然像SynchronizationContext / Deadlock问题......嗯...
您是否检查过(或确定)CreateStreamedFileFromUriAsync
真的完成了?
答案 1 :(得分:0)
发现它!
正如@ 1ppCH所提到的,它听起来像是同步/死锁问题......所以我试着让任务同步:
file = Task.Run(async () => {
var _file = await StorageFile.CreateStreamedFileFromUriAsync(name, uri, RandomAccessStreamReference.CreateFromUri(uri));
return await _file.CopyAsync(ApplicationData.Current.LocalFolder);
}).Result;
这似乎可以解决问题!
谢谢大家。