2011-12-05 44 views
0

我想在使用webclient檢查下載流之前,它是由ExtendedImage處理的,因爲我的應用程序在未找到uri時顯示錯誤。ImageTools和Webclient

所以我的解決方案是先加載圖像,然後將Web客戶端結果讀入擴展圖像。

這就是我想要做的。

WebClient wc = new WebClient(); 
wc.OpenReadAsync(Uri); 

wc.OpenReadCompleted += delegate(object Sender, OpenReadCompletedEventArgs e){ 
     Logo = new BitmapImage(); 
     ExtendedImage hExtendedImage = new ExtendedImage(); 

     try 
     { 
       hExtendedImage.SetSource(e.Result); 
       Logo.SetSource(hExtendedImage.ToStream()); 
     } 
     catch (WebException) 
     { 

     } 
}; 

但現在我得到一個「圖像不裝」從hExtendedImage錯誤在這條線

Logo.SetSource(hExtendedImage.ToStream()); 

我從e.Result圖像明顯裝入hExtendedImage錯誤。

+0

要離開了,你檢查e.Error == NULL的一部分嗎? – bperreault

回答

0
var client = new WebClient(); 

// Always define event handlers, 
// BEFORE calling any method that could invoke them. 
client.OpenReadCompleted += (s1, e1) 
{ 
    Logo = new BitmapImage(); 

    var extendedImage = new ExtendedImage(); 
    extendedImage.OnLoadingCompleted += (s2, e2) 
    { 
     // Invoke the dispatcher, so we're sure it's set on the UI thread. 
     Dispatcher.BeginInvoke(new Action 
     (
      () => Logo.SetSource(extendedImage.ToStream())) 
     ); 
    }; 
    extendedImage.SetSource(e1.Result); 
}; 

client.OpenReadAsync(Uri); 
+0

是'(s1,e2)'代表的簡寫嗎? *編輯,對不起,這是lambda :) –

0

不幸的是SetSource是ansyc。使用hExtendedImage的事件LoadingCompleted來設置Logo源。 注意: LoadingCompleted回調不在UI線程中!如果您想更改像Image這樣的UI控件,您必須調用調度程序。

從ExtendedBitmap源在CodePlex上:

public void SetSource(Stream stream) 
     { 
      Contract.Requires<ArgumentNullException>(stream != null, "Stream cannot be null."); 

      if (_uriSource == null) 
      { 
       LoadAsync(stream); 
      } 
     }