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 に答える