酢ろぐ!

カレーが嫌いなスマートフォンアプリプログラマのブログ。

画像ビューアっぽいものを作ってみた。 その4

Windows Mobileは通信を2スレッド位でしようとしたら落ちた記憶があるので、画像のダウンロード部分はロックをかけて排他的に処理させます。

pixivとかよくタイムアウトを返してくるサーバーがまぁまぁいるので、TimeOut例外が発生しても適当にリトライする様にしました。

        object lockItem = new object();

        private void DownloadProc()
        {
            Bitmap bmp = null;
            bool isSuccess = false;

            lock (lockItem)
            {
                for (int i = 0; i < this.RetryCount; i++)
                {

                    try
                    {
                        HttpWebRequest req 
                            = (HttpWebRequest)HttpWebRequest.Create(Info.PictureUrl);
                        using (HttpWebResponse res = (HttpWebResponse)req.GetResponse())
                        {
                            bmp = new Bitmap(res.GetResponseStream());
                        }

                        isSuccess = true;
                    }
                    catch (WebException e)
                    {
                        if (e.Status != WebExceptionStatus.Timeout)
                        {
                            throw e;
                        }
                    }

                    if (isSuccess)
                    {
                        Info.Image = bmp;
                        break;
                    }

                    System.Threading.Thread.Sleep(500);
                }

                this.OnDownloadComplate(bmp);
            }
        }

ダウンロードが完了したらOnDownloadComplateメソッドにBitmapを渡しています。使わないけど……