WPF-为什么在运行时从相对路径加载映像会失败*除非*我在调试器中检查对象?

WPF-为什么在运行时从相对路径加载映像会失败*除非*我在调试器中检查对象?,wpf,image,uri,visual-studio-2019,Wpf,Image,Uri,Visual Studio 2019,为此制作了一个新的测试项目,带有一个按钮和一个图像。MyImage.png位于项目的调试工作目录中,不包括在项目中 这可以很好地工作,并指定了绝对路径: private void BtnLoadFromFile_Click(object sender, RoutedEventArgs e) { Uri fileUri = new Uri("C:/blah/blah/blah/MyImage.png"); BitmapImage myimage = new BitmapImage(

为此制作了一个新的测试项目,带有一个按钮和一个图像。MyImage.png位于项目的调试工作目录中,不包括在项目中

这可以很好地工作,并指定了绝对路径:

private void BtnLoadFromFile_Click(object sender, RoutedEventArgs e)
{
    Uri fileUri = new Uri("C:/blah/blah/blah/MyImage.png");
    BitmapImage myimage = new BitmapImage(fileUri);
    Imagebox.Source = myimage;
}
这不会显示任何具有相对路径的图像:

private void BtnLoadFromFile_Click(object sender, RoutedEventArgs e)
{
    Uri fileUri = new Uri("MyImage.png", UriKind.Relative);
    BitmapImage myimage = new BitmapImage(fileUri);
    Imagebox.Source = myimage;
}
但是,我注意到,如果我在最后一行设置断点,检查myimage的属性(它包含指示myimage.png已成功找到的数据),然后继续执行,则相对路径确实有效。此时图像将显示。我正在使用VisualStudio2019社区


我很困惑为什么会发生这种情况。

这看起来像个bug。解决方法是设置
位图缓存选项。OnLoad

private void BtnLoadFromFile_Click(object sender, RoutedEventArgs e)
{
    var fileUri = new Uri("MyImage.png", UriKind.Relative);
    var myImage = new BitmapImage();
    myImage.BeginInit();
    myImage.UriSource = fileUri;
    myImage.CacheOption = BitmapCacheOption.OnLoad;
    myImage.EndInit();
    Imagebox.Source = myImage;
}
或者始终使用绝对URI:

private void BtnLoadFromFile_Click(object sender, RoutedEventArgs e)
{
    var fileUri = new Uri(Path.Combine(Environment.CurrentDirectory, "MyImage.jpg"));
    var myImage = new BitmapImage(fileUri);
    Imagebox.Source = myImage;
}