【问题标题】:ArgumentException not caught when using BitmapImage.BeginInit()使用 BitmapImage.BeginInit() 时未捕获 ArgumentException
【发布时间】:2011-04-15 22:09:16
【问题描述】:

为什么当由于 image.jpg 具有无效的元数据标头而发生 ArgumentException 时,第一个示例会捕获异常,而第二个示例没有?

示例 1:

try
{
Uri myUri = new Uri("http://example.com/image.jpg", UriKind.RelativeOrAbsolute);
JpegBitmapDecoder decoder2 = new JpegBitmapDecoder(myUri,
                             BitmapCreateOptions.PreservePixelFormat,
                             BitmapCacheOption.Default);
BitmapSource bitmapSource2 = decoder2.Frames[0];
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}

示例 2:

try
{
BitmapImage src = new BitmapImage();
src.BeginInit();
src.UriSource = new Uri("http://example.com/image.jpg");
src.EndInit();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}

【问题讨论】:

    标签: c# wpf bitmapimage bitmapsource argumentexception


    【解决方案1】:

    它可能一直在等待图像被请求加载,例如被设置为Image 控件的源。

    如果你添加它可能会给你一个例外

    src.CacheOption = BitmapCacheOption.OnLoad;
    

    您的声明。

    【讨论】:

    • 我将 BitmapImage 设置为边框上的背景属性,但这是我检查的第一件事。即使我没有将图像设置为某些东西的来源,异常仍然会发生。
    • 明确地说,您是说两个示例都抛出了异常,但示例 2 中没有捕获到异常?
    • 是的。每当加载的图像出现问题时,两者都会引发异常,但在示例 2 中未捕获到异常。
    • 我不知道除 OutOfMemoryException 或 ExecutionEngineException 之外的任何异常可以规避这样的一般 catch 块。你确定它是从那里扔的吗?也许尝试在 catch 块中放置一个断点;可能由于某种原因没有显示消息框。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-23
    • 1970-01-01
    相关资源
    最近更新 更多