Обработка исключений Silverlight / C # не найдена - PullRequest
3 голосов
/ 28 ноября 2010

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

, то есть: - когда sampleimage = http://www.google.com/images/logos/ps_logo2.png(существует - должно возвращаться нормально) - когда sampleimage = http://www.thisimagedoesnotexist.com/something.png (не существует - оно должно входить в блок catch)

Ниже мой код, который я использую - однако он никогда не входит в блок catch, когда изображение не существует .Я использую это в приложении Silverlight.Любые предположения о том, как я могу заставить это работать?

try
            {
                image.Source = new BitmapImage(new Uri(sampleimage, UriKind.Absolute));
            }
            catch (OutOfMemoryException)
            {
                sampleimage  = "defaulticon.jpg";
                image.Source = new BitmapImage(new Uri(sampleimage, UriKind.Absolute));
            }  

Ответы [ 3 ]

3 голосов
/ 28 ноября 2010

попробуйте ниже код

ДОБАВЛЕННЫЙ КОД ДЛЯ ОБРАБОТКИ URL НЕ НАЙДЕН

        Image image = new Image();
        string sampleimage = "http://www.google.com/images/logos/ps_logo2.png";

        Uri address;

        if (TryGetUriAddress(out address, sampleimage))
        {
            image.Source = new BitmapImage(address);

        }
        else
        {
            sampleimage = "defaulticon.jpg";
            image.Source = new BitmapImage(new Uri(sampleimage, UriKind.Absolute));
        }



 private bool TryGetUriAddress(out Uri validAddress,string addressToCreate)
    {
        bool isValid = false;
        validAddress = null;
        try
        {

            WebClient sc = new WebClient();
            sc.DownloadData(addressToCreate);
            validAddress = new Uri(addressToCreate, UriKind.Absolute);
            isValid = true;
        }
        catch (Exception ex)
        {
            isValid = false;
        }

        return isValid;
    }
1 голос
/ 28 ноября 2010

Правильный способ справиться с этим - использовать событие ImageFailed: -

bool defaultAssigned = false;
Image image = new Image();
image.ImageFailed += (s, args) =>
{
   if (!defaultAssigned)
   {
       image.Source = new BitmapImage(defaultImageUri);
       bDefaultAssigned = true;
   }
}
image.Source = new BitmapImage(sampleImageUri);
1 голос
/ 28 ноября 2010

Я ожидаю, что решение Саураба сработает.Я просто предлагаю альтернативу вашему подходу.Перед созданием BitmapImage попытайтесь получить действительный URI и затем передайте его конструктору BitmapImage.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...