Windows phone:从backgroundagent notify调用eventhandlers

时间:2013-03-19 03:40:28

标签: c# windows-phone-7 windows-phone-8

我尝试从网站下载图片并将其作为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的事件没有被召唤。

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

1 个答案:

答案 0 :(得分: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()调用,请确保在收到你的活动之前不会调用它。