1

我正在尝试从网站下载图像并将其作为 WP8 上的磁贴的背景。在 OnInvoke() 方法的后台代理中,我有以下几行可将该图像下载到 BitmapImage 对象中:

static BitmapImage img;

protected override void OnInvoke(ScheduledTask task)
{
    Deployment.Current.Dispatcher.BeginInvoke(() =>
                    {

                        img = new BitmapImage(new Uri(imgLoc, UriKind.Absolute));

                        img.ImageOpened += img_ImageOpened;
      });
}

但是,当我单步执行代码时,我从未遇到过 img_ImageOpened 事件

void img_ImageOpened(object sender, RoutedEventArgs e)
    {
        Deployment.Current.Dispatcher.BeginInvoke(() =>
                    {

                        Image uiImage = new Image();
                        uiImage.Source = img;
                        CreateNewHubTile(uiImage);
                    });
    }

URI 是正确的,我可以单步执行 OnInvoke() 方法的 Deployment.Current.Dispatcher.BeginInvoke(())...,只是未调用 BitmapImage 的事件。

我试过在谷歌搜索一些东西,但我似乎没有使用正确的关键字......任何帮助将不胜感激。

4

1 回答 1

0

您需要做的是禁用 BitmapImage 的延迟创建,这是通过将 CreateOptions 设置为 None 来完成的,如下所示:

protected override void OnInvoke(ScheduledTask task)
{
   Deployment.Current.Dispatcher.BeginInvoke(() =>
      {
          img = new BitmapImage(new Uri(imgLoc, UriKind.Absolute));
          img.CreateOptions = BitmapCreateOptions.None;
          img.ImageOpened += img_ImageOpened;
      });
}

此外,如果您调用了 NotifyComplete(),请确保在您收到事件之前不会调用它。

于 2013-03-19T11:58:39.030 回答