我在将图像按URL下载到BitmapImage时遇到问题。
在某些工作站上,这不起作用。我不知道为什么......
例如,在我自己的工作站上,这很好用。相同的OS,相同的网络。
嗯..我有一些代码可以从网络服务器加载一些图像并将它们显示在ListView中。
此代码部分处理下载:
Application.Current.Dispatcher.Invoke((Action)(delegate
{
try
{
DTOBild dtoBild = new DTOBild();
BitmapImage small_image_bmp = new BitmapImage(new Uri( "http://our-own-server/images/99999999/" + bild));
dtoBild.bitmap = small_image_bmp;
this.listeBilder.Add(dtoBild);
}
catch (Exception ex)
{
log.schreibeFehler("Error at loading image. Stack is following ...");
log.schreibeFehler(ex.Message);
log.schreibeFehler(ex.StackTrace);
}
}));
它崩溃了这一行:
BitmapImage small_image_bmp = new BitmapImage(new Uri( "http://our-own-server/images/99999999/" + bild));
这是一个例外:
Ausnahme von HRESULT:0x80072EE4 bei System.Runtime.InteropServices.Marshal.ThrowExceptionForHRInternal(Int32 errorCode,IntPtr errorInfo) bei System.Runtime.InteropServices.Marshal.ThrowExceptionForHR(Int32 errorCode) bei MS.Win32.WinInet.get_InternetCacheFolder() bei System.Windows.Media.Imaging.BitmapDownload.BeginDownload(BitmapDecoder decoder,Uri uri,RequestCachePolicy uriCachePolicy,Stream stream) bei System.Windows.Media.Imaging.LateBoundBitmapDecoder..ctor(Uri baseUri,Uri uri,Stream stream,BitmapCreateOptions createOptions,BitmapCacheOption cacheOption,RequestCachePolicy requestCachePolicy) bei System.Windows.Media.Imaging.BitmapDecoder.CreateFromUriOrStream(Uri baseUri,Uri uri,Stream stream,BitmapCreateOptions createOptions,BitmapCacheOption cacheOption,RequestCachePolicy uriCachePolicy,Boolean insertInDecoderCache) bei System.Windows.Media.Imaging.BitmapImage.FinalizeCreation() bei System.Windows.Media.Imaging.BitmapImage.EndInit()
有人可以帮助我吗?
答案 0 :(得分:0)
从堆栈跟踪中可以看到,问题似乎是由于尝试访问系统下载的图像缓存而引起的。您可以尝试在加载图像时绕过缓存,方法是设置BitmapCreateOptions.IgnoreImageCache
标志:
var small_image_bmp = new BitmapImage();
small_image_bmp.BeginInit();
small_image_bmp.CreateOptions = BitmapCreateOptions.IgnoreImageCache;
small_image_bmp.UriSource = new Uri("http://our-own-server/images/99999999/" + bild);
small_image_bmp.EndInit();
但这只是猜测。
答案 1 :(得分:0)
TL; DR:检查注册表项HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders
并修复任何不存在/不可访问/无效的路径 - 然后再注销然后再打开。
我也遇到了这个问题。首先,0x2ee4 = 12004 = ERROR_INTERNET_INTERNAL_ERROR
,所以HRESULT 0x80072EE4 = HRESULT_FROM_WIN32(ERROR_INTERNET_INTERNAL_ERROR)
现在这并没有告诉你太多,所以我不得不一直跟踪wininet.dll来解决它。在我的情况下,错误结果来自WININET!CCacheClientCounters::Initialize
,实际上是由我的Cache和Cookies shell文件夹以某种方式设置为无效值。您可以在注册表项HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders
中找到shell文件夹设置。请注意,您必须至少注销并再次使更改生效。
这就是为我修复它的原因,但由于这个错误可能意味着任何可能出错的事情,这可能不是你的问题。我在Wininet.dll中做了很多初始化的缓存内容,而且唯一的日志记录是一些ETW跟踪,看起来似乎是指原始源中的亚麻,所以它在调试中确实无济于事它适用于微软以外的任何人。