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