-6

デリゲートを介してエラーを渡すことはできません...

エラー:

Object reference not set to an instance of an object.

コード:

 RssReader.GetRssItems(IsUsePlainText,
                                  url, ShowImages,
                                  items =>
                                  {
                                      if (items.Any())
                                      {
                                          DataRSS.AddRange(items);
                                      }
                                  }, error => {

                                      var s = error.Message; // Nothing is go here... :(
                                  }
                                            , OnFinally);



public static void GetRssItems(bool isUsePlainText, string rssFeedUrl, bool showImages, 
            Action<IEnumerable<RssFeedItem>> onGetRssItemsCompleted = null,
            Action<Exception> onError = null, Action onFinally = null)
{

  var webClient = new WebClient();

  webClient.OpenReadCompleted += delegate(object sender, OpenReadCompletedEventArgs e)
  {
     try
     {
        if (e.Error != null) // report error
        {
            if (onError != null)
            {
                 onError(e.Error);
            }
            return;
         }

         var stream = e.Result;
         var response = XmlReader.Create(stream); 
         var feeds = SyndicationFeed.Load(response); // When something is wrong here an exception occurs

         // do other stuff...

}
 catch (Exception ex)
 {
   onError(ex); // ERROR HAPPENS HERE.... "Object reference not set to an instance of an object."
   return;

 }
 finally
 {
   if (onFinally != null)
   {
      onFinally();
   }
}

アップデート:

ここに画像の説明を入力してください

4

2 に答える 2

2

onErrornullのようです。

への変更:

if (onError != null) onError(ex);

または、呼び出し元がデリゲートの受け渡しに失敗した場合は、他のアクションを実行します。

于 2012-11-23T16:13:12.897 に答える
2

最初にアクションを呼び出したときと同じヌルチェックを実行します。

catch (Exception ex)
 { 
    if (onError != null)
        onError(ex); 
   return;    
 }

nullチェックを回避したい場合Actionは、メソッドの先頭にデリゲートするダミーハンドラーをアタッチします。

onError += (e) => {};
于 2012-11-23T16:14:22.033 に答える