使用ScheduledTaskAgent更新锁屏

本文关键字:更新 ScheduledTaskAgent 使用 | 更新日期: 2023-09-27 18:05:20

我希望能够使用计划任务代理更新我的锁屏图像。我确实看过《Building Windows Phone 8 Apps Development Jump Start》,这是一篇不错的文章。我的问题是,在这个视频中,它展示了如何改变你的背景与图片从你的孤立存储。使用:

  Uri imageUri = new Uri("ms-appdata:///local/shared/shellcontent/background2.png",                           UriKind.RelativeOrAbsolute);

这不是我的情况(我需要从一个web服务下载)。我用一段代码构建了一个小项目,它应该下载一个图像,将其存储到我的独立存储,然后使用它来上传我的锁屏(我想这是做我想做的最好的方法。)。

我使用了:

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,我面临着同样的结果。

使用ScheduledTaskAgent更新锁屏

您没有等待调用,因此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();
     });
}

然而,注意你的方法运行时间不要太长,否则你的计划任务将不会再次被调度(在这种失败两次之后)。