2010-09-03 2 views
5

Ho questo metodo:Ottenere un flusso da un percorso assoluto?

public RasImage Load(Stream stream);

se voglio caricare un URL del tipo:

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

Come posso fare questo URL in un flusso e passarlo nel mio load metodo?

risposta

4

Ecco un modo. Non so davvero se sia il modo migliore o no, ma funziona.

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

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

UPDATE: Sembra che in Silverlight, la classe WebRequest non ha un metodo GetResponse; non hai altra scelta che farlo in modo asincrono.

Di seguito è riportato un esempio di codice che illustra come procedere. (Vi avverto: l'ho scritto proprio ora, senza mettere troppo in considerazione quanto sia ragionevole.) Il modo in cui scegliete di implementare questa funzionalità sarebbe probabilmente molto diverso. Comunque, questo dovrebbe almeno darvi un'idea generale di ciò di cui avete bisogno

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

Un approccio simile, ma più brevi sarebbe quella di usare 'WebClient.OpenRead'. –

+0

@Fredrik: Bello, non lo sapevo. Va a dimostrare che c'è quasi sempre più di un modo per scuoiare un gatto. –

+0

Ragazzi, questi metodi non sembrano essere nel System.Net per Silverlight, qualsiasi indizio .... 'request.GetRespone())' o 'WebClient.OpenRead' Non li posso usare – VoodooChild

4

La risposta di Dan è buona, anche se si sta richiedendo da localhost. È un file a cui puoi accedere dal filesystem? Se è così, penso che si dovrebbe essere in grado di passare solo in un FileStream:

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

Sembra che il percorso localhost era solo un esempio: è probabile che voglia scaricare le immagini da Internet e manipolarle localmente. Non che io possa mai fare cose del genere> _> – JustLoren

+0

Buona cattura sulla parte localhost; Non l'avevo nemmeno notato. –

+0

Quando lo cambio in un file system locale sto ricevendo l'operazione "File non consentita. L'accesso al percorso '../images/Icons/thumb.gif' è negato. Su FileStream ... eventuali indizi – VoodooChild