2010-09-03 15 views
5

Ben bu yöntemi vardır:Mutlak bir yoldan Akışı mı alıyorsunuz?

public RasImage Load(Stream stream);

Ben böyle bir url yüklemek istiyorsanız: Bir akışa bu url nasıl yapabilirim

string _url = "http://localhost/Application1/Images/Icons/hand.jpg";

ve benim load içine geçmesi yöntem?

cevap

4

İşte bir yol. En iyi yol olup olmadığını bilmiyorum, ama işe yarıyor.

// requires System.Net namespace 
WebRequest request = WebRequest.Create(_url); 

using (var response = request.GetRespone()) 
using (var stream = response.GetResponseStream()) 
{ 
    RasImage image = Load(stream); 
} 

GÜNCELLEME: Silverlight, WebRequest sınıf hiçbir GetResponse yöntemi var gibi görünüyor; Bunu asenkronize etmek için başka seçeneğiniz yok.

Aşağıda bu konuya nasıl gidebileceğinizi gösteren örnek bir kod verilmiştir. (Sizi uyarıyorum: Bunu şimdi, ne kadar mantıklı olduğuna dair çok düşünmeden yazdım. Bu işlevselliği nasıl uygulamaya koyacağınız büyük olasılıkla oldukça farklı olacaktır. Her neyse, bu size en azından ihtiyacınız olan şey hakkında genel bir fikir vermelidir.

WebRequest request = WebRequest.Create(_url); 

IAsyncResult getResponseResult = request.BeginGetResponse(
    result => 
    { 
     using (var response = request.EndGetResponse(result)) 
     using (var stream = response.GetResponseStream()) 
     { 
      RasImage image = Load(stream); 
      // Do something with image. 
     } 
    }, 
    null 
); 

Console.WriteLine("Waiting for response from '{0}'...", _url); 
getResponseResult.AsyncWaitHandle.WaitOne(); 

Console.WriteLine("The stream has been loaded. Press Enter to quit."); 
Console.ReadLine(); 
+0

benzer, ancak daha kısa bir yaklaşım 'WebClient.OpenRead' kullanmak olacaktır. –

+0

@Fredrik: Güzel, bunu bilmiyordum. Bir kediyi ciltlemek için neredeyse her zaman birden fazla yol olduğunu göstermeye gider. –

+0

Çocuklar, bu yöntemler Silverlight için System.Net'te görünmüyor, herhangi bir ipucu .... 'request.GetRespone())' veya 'WebClient.OpenRead 'Onları kullanamıyorum – VoodooChild

4

Dan'ın yanıtı, localhost'tan isteğiniz olsa da iyi bir çözümdür. Bu dosya sisteminden erişebileceğiniz bir dosya mı? Eğer öyleyse, ben sadece bir FileStream geçmek mümkün olmalıdır düşünüyorum:

FileStream stream = new FileStream(@"\path\to\file", FileMode.Open); 
+0

localhost yolu sadece bir örnekti - görüntüleri internetten indirmek ve yerel olarak yönetmek isteyecek gibi görünüyor. Böyle şeyler yapamayacağımı değil> _> – JustLoren

+0

localhost bölümünde iyi yakalama; Fark etmemiştim bile. –

+0

Yerel bir dosyaya değiştirdiğimde "Dosya işlemine izin verilmiyor." FileStream'de '../images/Icons/thumb.gif' yoluna erişim engellendi. Herhangi bir ipucu – VoodooChild

İlgili konular