我希望能够使用计划任务代理更新我的锁屏图像。我确实看过Building Windows Phone 8 Apps Development Jump Start这是一篇很好的文章。 我的问题出在本视频中,它展示了如何通过隔离存储中的图片更改背景。 使用:
Uri imageUri = new Uri("ms-appdata:///local/shared/shellcontent/background2.png", UriKind.RelativeOrAbsolute);
这不是我的情况(我需要从网络服务下载)。 我用一段代码构建了一个小项目,该代码应该下载一个图像,将其存储到我的隔离存储中,然后用它来上传我的锁屏(我想这是做我想要的最好的方法。)。
为此,我使用了:
protected override void OnInvoke(ScheduledTask task)
{
Deployment.Current.Dispatcher.BeginInvoke(() =>
{
SavePictureInIsolatedStorage(
new Uri(
"http://www.petfinder.com/wp-content/uploads/2012/11/101418789-cat-panleukopenia-fact-sheet-632x475.jpg"));
// LockHelper();
NotifyComplete();
});
}
并且:
private async void SavePictureInIsolatedStorage(Uri backgroundImageUri)
{
BitmapImage bmp = new BitmapImage();
await Task.Run(() =>
{
var semaphore = new ManualResetEvent(false);
Deployment.Current.Dispatcher.BeginInvoke(()=>
{
bmp = new BitmapImage(backgroundImageUri);
semaphore.Set();
});
semaphore.WaitOne();
});
bmp.CreateOptions = BitmapCreateOptions.None;
WriteableBitmap wbmp = new WriteableBitmap(bmp);
using (IsolatedStorageFile myIsolatedStorage = IsolatedStorageFile.GetUserStoreForApplication())
{
var file = "shared/shellcontent/lockscreen.png";
// when file exists, delete it
if (myIsolatedStorage.FileExists(file))
{
myIsolatedStorage.DeleteFile(file);
}
using (var isoFileStream = new IsolatedStorageFileStream(file, FileMode.Create, myIsolatedStorage))
{
// use ToolStackPNGWriterExtensions
ToolStackPNGWriterLib.PNGWriter.WritePNG(wbmp, isoFileStream);
}
}
}
我的问题是我的位图图像似乎没有下载。 我也尝试使用WebClient,因为我面临同样的结果。
答案 0 :(得分:4)
你没有等待你的电话,所以在任何有机会运行之前都会调用NotifyComplete()
。您可以通过将lambda函数声明为async
来解决此问题。
protected override void OnInvoke(ScheduledTask task)
{
Deployment.Current.Dispatcher.BeginInvoke(async () =>
{
await SavePictureInIsolatedStorage(
new Uri(
"http://www.petfinder.com/wp-content/uploads/2012/11/101418789-cat-panleukopenia-fact-sheet-632x475.jpg"));
NotifyComplete();
});
}
但请注意,您的方法运行时间不会太长,否则您的计划任务将不会再次安排(在此类故障发生2次后)。