2011-11-07 7 views
0

現在、私のプログラムは、xmlファイルからレコードの画像とテキストを読み取り、画面に表示し、前/次のボタンのクリックが次のレコードに移動します。しかし、WindowsフォトギャラリーやFacebookの写真(これはウェブアプリではないことに気をつけてください)のように、各写真の間に数秒の読み込み時間が必要と思われます。ギャラリーの次の写真をロードするのに数秒かかることがないように、wpfデスクトップアプリケーションで写真をバックグラウンドで読み込むにはどうすればよいですか?

検索したところ、似たような状況がいくつか見つかりましたが、私の状況に合っていないようです。私は、バックグラウンドロードに対処するために、私の検索に基づいて、クラスを作ってみましたし、私のプログラムでそれを呼び出すが、それは誤りをはらんだと多分、私はそれが何やりたいしません。

//ImageManager.cs 

class ImageManager 
{ 
    private Dictionary<string, Image> images = new Dictionary<string, Image>(); 

    public Image get(string s) 
    { // blocking call, returns the image 
     return load(s); 
    } 

    private Image load(string s) 
    { // internal, thread-safe helper 
     lock (images) 
     { 
      if (!images.ContainsKey(s)) 
      { 
       Image img = images.Add(s, img); //load the image s - ERROR cannot implicitly convert type void to image. Void?? 
       return img; 
      } 
      return images[s]; 
     } 
    } 

    public void preload(params string[] imgs) 
    { // non-blocking preloading call 
     foreach (string img in imgs) 
     { 
      BackgroundWorker bw = new BackgroundWorker(); 
      bw.DoWork += (s, e) => { load(img); }; // discard the actual image return 
      bw.RunWorkerAsync(); 
     } 
    } 
} 


//MainWindow.cs 

ImageManager im = new ImageManager(); 
im.preload("Data/Images"); // Errors - im is a field but used like a type/token '(' 

多くのおかげで事前に

+0

あなたのエラー行:**イメージimg = images.Add(s、img)**は間違っているようです。左の変数imgはどのように右側で使用できますか? – Youngjae

答えて

1

ImageManagerは、ImageSourceで動作し、Imageでは動作しません。現在のコードがうまく動作しても、UIスレッドで作業を行う以外に選択肢がないため、UIが停止することがあります。 ImageSourceを処理する代わりに、バックグラウンドスレッドにロードしてからフリーズしてUIスレッドから使​​用することができます。これにより、画像をプリエンプティブにロードしたり、読み込み中の読み込みアニメーションを表示したりすることができます。

BitmapFrame.Createは、画像を読み込むために使用したい方法です。

1

縮小表示された画像を表示するか、1:1で表示するか、さらに小さくするかを検討してください。この方法ではプレビューの読み込みがはるかに高速になり、ユーザーが画像を十分に長く見ていると完全な画像を読み込むことができます。

現代の写真では、通常、画像の元のサイズは通常は表示されるよりも大きくなります。だからあなたがいつもオリジナルのイメージを読んでいると、決して表示されないものに大量のディスクIOを費やしてしまいます。

通常の注意:プログラムでは大文字と小文字は区別されません。パフォーマンスの問題の尺度と同様に、最適化よりも。

関連する問題