无效的图像路径被隐藏

时间:2014-07-15 22:02:33

标签: c# wpf image imagesource

我今天花了太长时间试图弄清楚为什么我的WPF应用程序似乎花了这么长时间来加载以前加载得更快的窗口。事实证明,问题的原因是图像控制带有无效的源uri(无论出于何种原因,我们都没有注意到图像没有被渲染)。

虽然实际代码涉及的范围更广,(图片跨越了许多dll),我可以轻松地重现下面的问题。

public partial class MainWindow : Window
    {
        public List<object> Items { get; private set; }

        public MainWindow()
        {
            Items = Enumerable.Repeat(new object(), 250).ToList();
            DataContext = this;
            InitializeComponent();
        }
    }

<ItemsControl ItemsSource="{Binding Items}">
        <ItemsControl.ItemTemplate>
            <DataTemplate>
                <Image Source="icon.png" />
            </DataTemplate>
        </ItemsControl.ItemTemplate>
    </ItemsControl>

当您使用不存在的内容替换源代码时,在应用程序启动之前,您获得的所有内容都是非常长的延迟,而不是在输出窗口中获得异常。显然,在这个简单的例子中,很容易看出错误,但在大型项目中却不是这样。

我不想再次被这个抓住,无论如何都要抓住这些错误?为什么我在调试版本的输出窗口中没有看到任何内容?

编辑:事实证明我可以做这样的事情

public partial class App : Application
    {
        public App()
        {
            EventManager.RegisterClassHandler(typeof(Image), Image.ImageFailedEvent, 
                new EventHandler<ExceptionRoutedEventArgs>(OnImageFailed));
        }

        void OnImageFailed(object sender, ExceptionRoutedEventArgs e)
        {
            throw new Exception("Image Failed! : " + e.ErrorException.Message, e.ErrorException);
        }
    }

我对此并不过分满意,因为可能有其他控件可能会遇到同样的问题,并且在添加上述处理程序之前不会被检测到。

0 个答案:

没有答案