在執行我的應用程序時,我需要知道在確定是否拍攝現場照片或「不可用圖片」之前,是否有可用的圖片(來自指定的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