Windows phone:从后台代理通知调用事件处理程序

本文关键字:通知 调用 事件处理 程序 代理 后台 phone Windows | 更新日期: 2023-09-27 18:04:48

我正试图从一个网站下载一个图像,并使其在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是正确的,我可以步骤到Deployment.Current.Dispatcher.BeginInvoke(())…在OnInvoke()方法中,只有BitmapImage的事件没有被调用。

我试着在谷歌上搜索一些东西,但我似乎没有使用正确的关键词…

Windows phone:从后台代理通知调用事件处理程序

您需要做的是禁用延迟创建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(),确保它不会被调用,直到你收到你的事件。