我正在尝试使用webclient检查下载流,然后由ExtendedImage处理,因为我的应用程序在找不到uri时显示错误。
所以我的解决方案是首先加载图像,然后将webclient结果读入扩展图像。
这就是我想要做的。
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 :(得分:0)
不幸的是,SetSource是ansyc。使用hExtendedImage的事件LoadingCompleted来设置徽标源。 小心: LoadingCompleted回调不在ui线程中!如果要更改像Image这样的UI控件,则必须调用调度程序。
来自CodePlex上的ExtendedBitmap源:
public void SetSource(Stream stream)
{
Contract.Requires<ArgumentNullException>(stream != null, "Stream cannot be null.");
if (_uriSource == null)
{
LoadAsync(stream);
}
}
答案 1 :(得分: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);