如何从绝对URI获取ResourceStream?调用后返回null求助
解决Application.GetResourceStream返回null的问题
嘿,我来帮你搞定这个问题!Application.GetResourceStream返回null大概率是因为你用错了它的适用场景,咱们拆解下可能的原因和解决办法:
核心误区:它不支持加载远程HTTP资源
你代码里用的是http://开头的绝对URI,但GetResourceStream的设计目的是加载应用程序内嵌的本地资源,比如项目里打包的图片、XAML文件这类,完全不支持加载网络上的资源。这就是为什么你的sri会是null!
如果是要加载远程图片,直接给BitmapImage设置UriSource就好,不用绕弯子:BitmapImage src = new BitmapImage(); src.UriSource = new Uri("http://----", UriKind.Absolute); WriteableBitmap bitmap = new WriteableBitmap(src);如果是加载本地内嵌资源,检查路径和生成属性
要是你本来想加载项目里的本地资源,那得做两步检查:- 右键资源文件(比如图片),在属性里把生成操作设置为
Resource或者Embedded Resource; - 确保URI格式正确,要包含程序集名称和资源路径:
// 替换YourAssemblyName为你的程序集名称,路径对应资源实际位置 StreamResourceInfo sri = Application.GetResourceStream( new Uri("/YourAssemblyName;component/Images/your-image.png", UriKind.Relative)); if (sri != null) { BitmapImage src = new BitmapImage(); src.SetSource(sri.Stream); WriteableBitmap bitmap = new WriteableBitmap(src); }
- 右键资源文件(比如图片),在属性里把生成操作设置为
非要用流加载远程资源?换HttpClient/WebClient
如果你的需求必须通过流来加载远程图片,那得用HTTP客户端来下载流,而不是GetResourceStream:// 记得给方法加上async关键字 using (HttpClient client = new HttpClient()) { using (Stream stream = await client.GetStreamAsync("http://----")) { BitmapImage src = new BitmapImage(); src.SetSource(stream); WriteableBitmap bitmap = new WriteableBitmap(src); } }
内容的提问来源于stack exchange,提问作者Rachel
相关产品推荐
相关产品推荐

