1

私は Windows Phone スケジュール エージェントを使用しており、同期後に画像名を更新しようとしています。問題は、この関数の行 "BitmapImage bmp = new BitmapImage();" で無効なクロス例外が発生することです。そして本当に理由がわかりません。

void UpdateSyncPictureName(int AsyncStatus, int AticketID, int AsyncID, int ApictureID, int TsyncStatus = 0, int TsyncID = 0)
    {
        string filename = AsyncStatus + "-" + AticketID + "-" + AsyncID + "-" + ApictureID;
        using (IsolatedStorageFile ISF = IsolatedStorageFile.GetUserStoreForApplication())
        {
            if (ISF.FileExists(filename))
            {

                BitmapImage bmp = new BitmapImage();
                using (IsolatedStorageFileStream isoStream =
                    ISF.OpenFile(filename, System.IO.FileMode.Open))
                {
                    bmp.SetSource(isoStream);
                }
                ISF.DeleteFile(filename);
                WriteableBitmap Wbmp = new WriteableBitmap(bmp);
                using (IsolatedStorageFileStream isoStream =
                ISF.OpenFile(TsyncStatus + "-" + AticketID + "-" + TsyncID + "-" + ApictureID, System.IO.FileMode.Create))
                {
                    Extensions.SaveJpeg(Wbmp, isoStream,
                        Wbmp.PixelWidth,
                        Wbmp.PixelHeight,
                        0, 100);
                }


            }
        }
    }
4

1 に答える 1

5

この問題は、BitmapImage を UI スレッドの外でインスタンス化できないという事実から発生します。Dispatcher Invoke 呼び出しで呼び出しをラップすることで、この問題を解決できます。

ただし、NotifyComplete を正しく呼び出す必要があります。そのため、NotifyComplete を Dispatcher 呼び出しに入れる必要がある場合があります。

Deployment.Current.Dispatcher.BeginInvoke(() =>
{
    UpdateSyncPictureName(...);
    NotifyComplete();
});
于 2012-12-10T22:17:28.687 に答える