加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 使用.NET / WPF预加载图像资源

发布时间:2020-12-15 22:11:35 所属栏目:百科 来源:网络整理
导读:我想在应用程序启动时预加载我的图像资源.图像应缓存在应用程序内存中.所以我可以使用 我的应用程序中预装的图像. 问题是,如果我加载一个内部有很多图像的特定视图, 应用程序挂起几秒钟,之后会出现视图. 该应用程序基于XAML,但图像控件的source-property是动
我想在应用程序启动时预加载我的图像资源.图像应缓存在应用程序内存中.所以我可以使用
我的应用程序中预装的图像.

问题是,如果我加载一个内部有很多图像的特定视图,
应用程序挂起几秒钟,之后会出现视图.
该应用程序基于XAML,但图像控件的source-property是动态更改的.

我测试了一些东西,但似乎没有任何效果.

var uri = new Uri ( "pack://application:,/Vibrafit.Demo;component/Resources/myImage.jpg",UriKind.RelativeOrAbsolute ); //unit.Image1Uri;
var src = new BitmapImage ( uri );
src.CacheOption = BitmapCacheOption.None;
src.CreateOptions = BitmapCreateOptions.None;

src.DownloadFailed += delegate {
    Console.WriteLine ( "Failed" );
};

src.DownloadProgress += delegate {
    Console.WriteLine ( "Progress" );
};

src.DownloadCompleted += delegate {
    Console.WriteLine ( "Completed" );
};

但图像不会加载.加载图像的唯一方法是在Image-Control中将其显示在屏幕上,并将Source-Property分配给我新创建的BitmapImage-Object.但我不想在启动时显示所有图像.

解决方法

如果要立即加载图像,则需要设置此缓存选项:

src.CacheOption = BitmapCacheOption.OnLoad;

否则,它会在您第一次访问数据时按需加载(或者,在您的情况下,每次尝试访问图像数据时,因为您选择无).

见documentation

此外,您在设置缓存选项之前设置UriSource.所以尝试类似的东西(从我的头脑中,现在无法测试):

var uri = new Uri ( "pack://application:,UriKind.RelativeOrAbsolute ); //unit.Image1Uri;
var src = new BitmapImage ();
src.BeginInit();
src.CacheOption = BitmapCacheOption.OnLoad;
src.CreateOptions = BitmapCreateOptions.None;
src.DownloadFailed += delegate {
    Console.WriteLine ( "Failed" );
};

src.DownloadProgress += delegate {
    Console.WriteLine ( "Progress" );
};

src.DownloadCompleted += delegate {
    Console.WriteLine ( "Completed" );
};
src.UriSource = uri;
src.EndInit();

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读