在执行我的应用程序时,我需要知道在确定是否拍摄现场照片或“不可用图片”之前,是否有可用的图片(来自指定的URI)。同步获取图片(来自Uri)
因为图片只设置一次,所以我需要同步了解图片是否可访问且没有损坏。我试图与无扩展,但我从来没有能够得到的第一个元素(整个应用程序冻结的。首先()语句时)
以下blogger遮住了我的问题,但他的代码,甚至没有编制。我想这可能与Reactive使用的新语法有关。此外,Reactive仍处于Silverlight 5的测试阶段,我猜它可能仍然有不寻常的行为。
我愿意接受任何其他可能的解决方案,但对我来说更好的解决方案将能够创建一个打开读取()扩展方法WebClient类,并使用它像这样:
var pictureStream = new WebClient().OpenRead(_uri);
if (pictureStream != null)
{
var picture = new BitmapImage();
picture.SetSource(picture);
return picture;
}
else
{
//Picture is unavailable
}
非常感谢你!
您可以简单地忘记Silverlight中的同步I/O调用。他们不被允许。这是一件好事。微软故意只留下方法的异步版本,以避免人们编写废话软件,这些软件会在有人执行I/O操作时冻结。只需习惯异步编程。在C#5.0中会有新的'async/await'关键字,它们允许你编写看起来同步的代码,但是在后台编译器会生成所有必要的管道以执行真正的异步非阻塞调用。 – 2012-02-12 22:51:43
嗯,我的确在想假装异步调用,这正是Reactive Extensions设计的原因......所以我想这是可能的。我的整个应用程序被设计为异步,但在这个地方,我真的需要知道当前函数中的信息。一个await函数无疑会完成这项工作...... – Philippe 2012-02-12 22:59:24
@Philippe - Rx是关于抽象事件和异步操作 - 而不是“伪装”它们。如果你曾经使用'.First()'(或其姊妹阻塞函数),那么你很可能不会做正确的事情。我建议你重新考虑你的方法。 – Enigmativity 2012-02-12 23:48:39