Member 12680324 Ответов: 1

Как поймать ни одного поддерживающего изображения


Я хочу поймать ни одного поддерживающего изображения до возвращения, но все равно нуждаюсь в помощи. Пожалуйста

Он ничего не ловит и делает мое приложение аварийным.

Что я уже пробовал:

<pre lang="c#">
 public static ImageBrush GetImage(string source)
{
 if (System.IO.File.Exists(source))
            {
                ImageBrush myBrush = new ImageBrush();
                try
                {
                    myBrush.ImageSource = new BitmapImage(new Uri(source, UriKind.Relative));
                }
                catch
                {
                    myBrush.ImageSource = new BitmapImage(new Uri(Root.DefaultObjectPicture, UriKind.Relative));
                }

                return myBrush;

            }
}
// and caller method
try{
         MyRectangle.Fill = GetImage(@"BrokenImageTest.jpg");
}
catch{}

1 Ответов

Рейтинг:
6

Jochen Arndt

Вы не обрабатываете исключения, а вместо этого вызываете функцию, которая, скорее всего, вызывает еще одно исключение в вашем случае. catch обработчик.

Вы должны прочитать об исключениях: попробовать-поймать (Справочник по c#) | Майкрософт документы[^].

Затем проверьте, какие исключения могут быть вызваны используемыми функциями, прочитав ссылки на функции и обработав их.
Для вашего случая:
Конструктор BitmapImage (Uri) (System.Окна.Средства массовой информации.Изображений)[^] и
Конструктор Uri (String, UriKind) (System)[^].

Так что это должно быть что-то вроде

bool bSuccess = false;
try
{
    // Call function(s) here that might throw exceptions

    // If execution reaches this point, no exceptions occured
    bSuccess = true;
}
// Catch and handle exceptions
catch (UriFormatException e)
{
    // Handle UriFormatException here
}
catch (FileNotFoundException e)
{
    // Handle FileNotFoundException here
}
// Handle more excpetions here as necessary

if (!bSuccess)
{
    // Try a different method which may throw also exceptions that should be handled
}