2014-02-02 2 views
0

Я пытаюсь получить элементы из rss-канала, но порой я получаю TargetInvocationException, «неспособный подключиться к удаленному серверу». Я пытаюсь использовать блок catch try, чтобы поймать эту ошибку, но я не управляю, поскольку мне нужен переменный фид, который будет использоваться во всем другом коде, и, как это, он не отображается. Какие-либо предложения?Исключение цели Invocation в async-методе

public static async Task<List<FeedItem>> getFeedsAsync(string url) 
    { 
     //The web object that will retrieve our feeds.. 
     SyndicationClient client = new SyndicationClient(); 

     //The URL of our feeds.. 
     Uri feedUri = new Uri(url); 

     //Retrieve async the feeds.. 
     try 
     { 
      var feed = await client.RetrieveFeedAsync(feedUri); 
     } 
     catch (TargetInvocationException e) 
     { 

     } 

     //The list of our feeds.. 
     List<FeedItem> feedData = new List<FeedItem>(); 

     //Fill up the list with each feed content.. 
     foreach (SyndicationItem item in feed.Items) 
     { 
      FeedItem feedItem = new FeedItem(); 
      feedItem.Content = item.Summary.Text; 
      feedItem.Link = item.Links[0].Uri; 
      feedItem.PubDate = item.PublishedDate.DateTime; 
      feedItem.Title = item.Title.Text; 

      try 
      { 
       feedItem.Author = item.Authors[0].Name; 
      } 
      catch(ArgumentException) 
      { } 

      feedData.Add(feedItem); 
     } 

     return feedData; 
    } 

} 
} 

ответ

0
IAsyncOperationWithProgress<SyndicationFeed, RetrievalProgress> feed; 

//Retrieve async the feeds.. 
try 
{ 
    feed = await client.RetrieveFeedAsync(feedUri); 
} 
catch (TargetInvocationException e) 
{ 

} 
+0

Если я использую это, я получаю сообщение об ошибке, которое я не могу преобразовать из Windows.Web.Syndication.SyndicationFeed в Windows.Foundation. IAsyncOperationWithProgress

+0

@TamaraCaligari. Вы должны использовать определенный тип, возвращаемый 'RetrieveFeedAsync'. Кажется, что у вас проблема с «использованием», поэтому попробуйте использовать полное квалифицированное имя. – i3arnon

1

Этот вид ошибки не может быть предотвращено. Это exogenous exception.

Существует только один способ борьбы с такими ошибками: ваше приложение должно быть спроектировано так, чтобы ожидать их и реагировать разумным образом (например, вызывать диалог или уведомление об ошибке).

В частности, не пытайтесь игнорировать их с помощью пустого блока catch.

+0

Как показать всплывающий диалог из блока catch? –

+0

Вы используете любые API-интерфейсы, доступные на вашей платформе. –

Смежные вопросы