2017-07-03 7 views
0

私はImageコントロール付きのカスタムUserControlを持っています。私はウェブ[ネットワークサーバー]からイメージを取得し、ディスパッチャータイマーを使用してソースをリフレッシュして自分のコントロールに表示しようとしています。コードは次のとおりです。Web画像を取得し、インターバル後に画像コントロールに表示する - 動作しません。

void StartSourceRefresh() 
    { 
     if (timeinterval < 1) timeinterval = 1; 
     tmrRefresh.Tick += new EventHandler(dispatcherTimer_Tick); 
     tmrRefresh.Interval = new TimeSpan(0, 0, timeinterval); //in hour-minute-second 
     tmrRefresh.Start(); 
    } 

    public void ChangeImageSource(string newSource) 
    { 
     //newSource = "http://192.168.1.3/abc/imagetobeshown.png" 

     WebImg.Source = null; 

     if (newSource.Trim() == "") 
      WebImg.Source = new BitmapImage(new Uri(@imagePlaceholder, UriKind.Absolute)); 
     else 
     { 
      BitmapImage image = new BitmapImage(); 
      image.BeginInit(); 
      image.UriSource = new Uri(@newSource, UriKind.Absolute); 
      image.EndInit(); 
      WebImg.Source = image; 
     } 
    } 

    private void dispatcherTimer_Tick(object sender, EventArgs e) 
    { 
     ChangeImageSource(txtImgSrc.Text.Trim()); 
    } 

問題は画像が変わりません。それは最初に取った同じものを示しています。タイマーは正常に動作しています。しかし、イメージは変わらないでしょう。私はここで間違って何をしていますか?

編集:ネットワークソースが取得する一定の間隔の後に更新されるため、あなたは明らかにデフォルトでキャッシュされている同じ画像URLからリロードされ

+1

も参照[?C#で変数名に@文字の使用/意味は何](https://stackoverflow.com/questions/91817/whats- c)変数名における文字の意味を使用する。 – Clemens

答えて

2

同じソースを取得する必要があります。 BitmapCreateOptions.IgnoreImageCacheを設定することにより、

キャッシュを無効にする:

var image = new BitmapImage(); 
image.BeginInit(); 
image.CreateOptions = BitmapCreateOptions.IgnoreImageCache; 
image.UriSource = new Uri(newSource); 
image.EndInit(); 
+0

イメージのネットワークソースが一定の間隔の後にリフレッシュされ、イメージが変更されます。だから私は同じソースを取得する必要があります –

+0

その理由は、キャッシュをバイパスする必要があります。 – Clemens

+0

あなたの解決策を試してみてください。それが動作する場合は受け入れます。とにかくありがとう:) –

関連する問題