ImageTools and Webclient
本文关键字:Webclient and ImageTools | 更新日期: 2023-09-27 18:16:53
我试图使用webclient检查下载流之前,它是由ExtendedImage处理,因为我的应用程序显示一个错误,当uri没有找到。
所以我的解决方案是首先加载图像,然后将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错误。
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);
不幸的是,SetSource是async。使用hExtendedImage的LoadingCompleted事件来设置Logo源。小心: LoadingCompleted回调不在ui线程中!如果你想改变UI控件,比如Image.
,你必须调用dispatcher。从ExtendedBitmap源代码在CodePlex:
public void SetSource(Stream stream)
{
Contract.Requires<ArgumentNullException>(stream != null, "Stream cannot be null.");
if (_uriSource == null)
{
LoadAsync(stream);
}
}