1

我正在创建一个 DependencyObject 以用作图像下载器,我期望的行为是,一旦它下载了应用程序缓存图像,当您将图像控件绑定到从 Uri 或直接创建的 BitmapImage 时,这种行为是正常的绑定 Uri 本身。但是,使用 Stream 时并非如此,至少在我的情况下,这是我的代码:

    if ( String.IsNullOrEmpty( ImageEx.GetImage( this ) ) ) return;

        ImageBitmap = new BitmapImage( new Uri( String.Concat( "ms-appx:///", ImageEx.GetLoadingImage( this ) ) ) );
        //ImageBitmap = new BitmapImage( new Uri( ImageEx.GetImage( this ), UriKind.Absolute ) );
        //return;

        try {
            var ras = new InMemoryRandomAccessStream();
            var memoryStream = new MemoryStream();
            var stream = await client.GetStreamAsync( ImageEx.GetImage( this ) );

            await stream.CopyToAsync( memoryStream );
            var output = ras.GetOutputStreamAt( 0 );
            var dw = new DataWriter( output );
            var task = new Task( () => dw.WriteBytes( memoryStream.ToArray() ) );
            task.Start();

            await task;
            await dw.StoreAsync();

            await output.FlushAsync();

            ImageBitmap = new BitmapImage();
            await ImageBitmap.SetSourceAsync( ras);             


        } catch ( Exception ex ) {

    }

因此,当我在应用程序中来回移动时,每次重新加载图像而不是像使用 Uri 创建它或将图像控件直接绑定到 Uri 时那样缓存 BitmapImage。如何防止 BitmapImage 再次加载?

谢谢

4

0 回答 0