2012-03-08 14 views
0

私はURLの配列を持っています。各URLには1つのイメージが含まれます。私はそれらを1つずつダウンロードしてスライドショーを開始する必要があります。ループを使って各ファイルをダウンロードして表示しようとしました。しかし、私が前のイメージを取得しようとしているときは、何も得られません。私のコードはWindows Phoneでのスライドショー

string [] urlArray; 
int currentItem; 
int totalItems; 
private void StartSlideShow() 
{ 
    for(int i=0;i < totalItems;i++) 
    { 
     DownloadImage(urlArray[i]); 
    } 
} 

private void DownloadImage(string url) 
{ 
    WebClient wc=new WebClient(); 
    wc.OpenReadCompleted+=new OpenReadCompletedEventHandler(wc_OpenReadCompleted); 
    wc.OpenReadAsync(new Uri(url)); 
} 

private void wc_OpenReadCompleted(object sender,OpenReadCompletedEventArgs e) 
{ 
    BitmapImage bi=new BitmapImage(); 
    bi.SetSource(e.Result); 
    imgThumbnail.Source=bi; 
} 

private void btnNext_Click(object sender, RoutedEventArgs e) 
{ 
    if (currentItem < totalItems) 
    { 
     DownloadImage(urlArray[currentItem+1]); 
     currentItem++; 
    } 
} 
private void btnBack_Click(object sender, RoutedEventArgs e) 
{ 
    if (currentItem > 1) 
    { 
     DownloadImage(urlArray[currentItem-1]); 
     currentItem--; 
    } 
} 

下に表示され

それから私は、最初にすべての画像をダウンロードして、BitmapImageの配列に保存しようと、ダウンロードが完了した後、スライドショーを開始することを試みました。この場合、何も表示されません。

コードが

private void wc_OpenReadCompleted(object sender, OpenReadCompletedEventArgs e) 
{ 
     bi.SetSource(e.Result); 
     biArr[currentItem].SetSource(e.Result); 
    if(currentItem==totalItems]) 
     ShowSlides(biArr); 
} 

private void ShowSlides(BitmapImage[] biArr) 
{ 
    for(int i=0;i < totalItems;i++) 
    { 
     imgThumbnail.Source=biArr[i]; 
     System.Threading.Thread.Sleep(5000); 
    } 
} 

その後、私はBYTEARRAYに画像を変換し、リスト名BMPListにそれを保存しようとしましたです。 (リストBMPList)。私は黒の色が画像として表示された画像を表示しようとしていますダウンロード完了後

コードは、私はすべての画像をダウンロードして、スライドショーを開始するにはどうすればよい

private void wc_OpenReadCompleted(object sender, OpenReadCompletedEventArgs e) 
{ 
    BitmapImage bi = new BitmapImage(); 
    bi.SetSource(e.Result); 
    using (MemoryStream ms = new MemoryStream()) 
    { 
     WriteableBitmap btmMap = new WriteableBitmap(bi.PixelWidth, bi.PixelHeight); 
     System.Windows.Media.Imaging.Extensions.SaveJpeg(btmMap, ms, bi.PixelWidth, bi.PixelHeight, 0, 100); 
     BMPList.Add(ms.ToArray()); 
    } 
    if(currentItem == totalItems) 
     ShowSlides(BMPList); 
} 

private void ShowSlides(List<byte[]> BMPList) 
{ 
    for(int i=0; i < BMPList.Count;i++) 
    { 
     if (BMPList[currentDisplayItem] != null) 
     { 
      MemoryStream ms = new MemoryStream(BMPList[i], 0, BMPList[i].Length); 
      ms.Write(BMPList[i], 0, BMPList[i].Length); 

      BitmapImage img = new BitmapImage(); 
      img.SetSource(ms); 
      imgThumbnail.Source = img; 
     } 
       System.Threading.Thread.Sleep(5000); 
    } 
} 

のですか?

+0

コードをどのようにフォーマットするか教えてください。 –

+2

フォーマットの詳細については、http://stackoverflow.com/editing-helpを参照してください –

+1

コードを選択し、ctrl + K、このメタをあなたに与えてください:http://meta.stackexchange.com/questions/22186/how-do- i-format-my-code-blocks –

答えて

1

自分で画像をダウンロードする必要はありません。ちょうどのSourceをUriに指定してください。

ウェブベースの画像をたくさん使用している場合のメモリの問題を回避する方法については、http://blogs.msdn.com/b/swick/archive/2011/04/07/image-tips-for-windows-phone-7.aspxも参照してください。

+0

返信ありがとうございます。 1つの画像のみが読み込まれている場合、正しく動作します。しかし、私は複数の項目(ループを使用して)をロードしようとしているときに何も起こっていません。 –

関連する問題