C# 无效的图像路径被隐藏

C# 无效的图像路径被隐藏,c#,wpf,image,imagesource,C#,Wpf,Image,Imagesource,我今天花了太多时间试图弄明白为什么我的WPF应用程序加载以前加载得更快的窗口似乎要花这么长时间。事实证明,问题的原因是源uri无效的图像控件(无论出于何种原因,我们都没有注意到图像没有被渲染) 虽然实际的代码要复杂得多,(图像跨越了许多DLL),但我可以很容易地重现下面的问题 public partial class MainWindow : Window { public List<object> Items { get; private set; }

我今天花了太多时间试图弄明白为什么我的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>
公共部分类主窗口:窗口
{
公共列表项{get;private set;}
公共主窗口()
{
Items=Enumerable.Repeat(newobject(),250).ToList();
DataContext=this;
初始化组件();
}
}
当你用不存在的东西替换源代码时,你得到的不是一个异常或者至少是输出窗口中的某个东西,而是应用程序启动前的一个很长的延迟。显然,在这个简单的例子中,很容易看出哪里出了问题,但在大型项目中却不是这样

我不想再被这件事缠住了,有没有办法抓住这种错误呢?为什么我在调试构建的输出窗口中看不到任何东西

编辑:所以我可以这样做

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);
        }
    }
公共部分类应用程序:应用程序
{
公共应用程序()
{
EventManager.RegisterClassHandler(typeof(Image),Image.ImageFailedEvent,
新事件处理程序(OnImageFailed));
}
无效OnImageFailed(对象发送方,例外RoutedEventArgs e)
{
抛出新异常(“映像失败!:”+e.ErrorException.Message,e.ErrorException);
}
}
不过我对此并不太满意,因为可能还有其他控件可能会遇到同样的问题,并且在添加类似上面的处理程序之前不会被检测到