Ticket #33115

- プロフィール画像のロード時にWebExceptionが発生すると無限ループとなる場合がある

Open Date: 2014-02-09 02:10 Last Update: 2014-02-09 03:46

Reporter:
Owner:
Type:
Status:
Closed
Component:
(None)
MileStone:
Priority:
6
Severity:
5 - Medium
Resolution:
None
File:
None

Details

プロフィール画像のロード時に壊れた画像が取得されたりネットワークが切断されていたりした場合に、ロード処理が無限に実行される場合がある。この場合、UIスレッド上で無限ループとなるため操作不能な状態になる。

参照: https://twitter.com/kim_upsilon/status/432126522271338497

Ticket History (3/4 Histories)

2014-02-09 02:10 Updated by: upsilon
  • New Ticket "プロフィール画像のロード時にWebExceptionが発生すると無限ループとなる場合がある" created
2014-02-09 02:21 Updated by: upsilon
  • Owner Update from (None) to upsilon
Comment

大雑把に流れを書くとこんな感じ。

  1. ImageListViewItem.GetImageAsync() から ImageCache.DownloadImageAsync() が呼ばれる
  2. ロード中に WebException が発生すると ImageCache.DownloadImageAsync() は null を返す(←ここがおかしい)
  3. ImageListViewItem.GetImageAsync() 内の ContinueWith に入る
  4. t.IsFaulted は false なので正常に画像が取得できたものとして続行される
  5. 取得された画像を描画するために this.ListView.RedrawItems() が呼ばれ、対象となる項目の再描画が実行される
  6. リスト項目を描画するために、対象となる項目について TweenMain.MyList_RetrieveVirtualItem() が呼ばれる
  7. ここで キャッシュにヒットしなかった 場合、TweenMain.CreateItem() によって ImageListViewItem インスタンスが生成される
  8. ImageListViewItem のコンストラクタには this.GetImageAsync() を呼ぶ処理が含まれている
  9. 最初に戻る
2014-02-09 03:45 Updated by: upsilon
  • Status Update from Open to Closed
  • Ticket Close date is changed to 2014-02-09 03:45
2014-02-09 03:46 Updated by: upsilon
  • Summary Updated

Attachment File List

No attachments

Edit

You are not logged in. I you are not logged in, your comment will be treated as an anonymous post. » Login