2010-09-03 11 views
5

J'ai cette méthode:Obtenir un flux à partir d'un chemin absolu?

public RasImage Load(Stream stream);

si je veux charger une URL comme:

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

Comment puis-je faire de cette url dans un cours d'eau et de le transmettre dans mon load méthode?

Répondre

4

Voici un moyen. Je ne sais pas vraiment si c'est la meilleure ou pas, mais ça marche.

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

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

MISE À JOUR: Il semble que dans Silverlight, la classe WebRequest n'a pas de méthode GetResponse; vous n'avez pas d'autre choix que de le faire de manière asynchrone.

Vous trouverez ci-dessous un exemple de code illustrant comment procéder. (Je vous préviens: je l'ai écrit tout à l'heure, sans trop réfléchir à la question de savoir comment il est raisonnable de le faire.Cependant, la façon dont vous choisirez d'implémenter cette fonctionnalité sera probablement très différente, mais cela devrait au moins vous donner une idée générale de ce dont vous avez besoin. faire.)

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

Une approche similaire, mais plus courte serait d'utiliser 'WebClient.OpenRead'. –

+0

@Fredrik: Nice, ne savait pas à ce sujet. Va montrer qu'il y a presque toujours plus d'une façon de peler un chat. –

+0

Les gars, ces méthodes ne semblent pas être dans le System.Net pour la Silverlight, des indices .... 'request.GetRespone())' ou 'WebClient.OpenRead' Je ne peux pas les utiliser – VoodooChild

4

La réponse de Dan est bonne, même si vous demandez à localhost. Est-ce un fichier auquel vous pouvez accéder à partir du système de fichiers? Si oui, je pense que vous devriez être en mesure de passer juste un FileStream:

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

Il ressemble à la Le chemin localhost n'était qu'un exemple - il voudra probablement télécharger des images sur Internet et les manipuler localement. Pas que je ferais jamais de telles choses> _> – JustLoren

+0

Bonne prise sur la partie localhost; Je n'avais même pas remarqué. –

+0

Quand je le change en un système de fichiers local, j'obtiens 'opération de fichier non autorisée. L'accès au chemin '../images/Icons/thumb.gif' est refusé. 'Sur le FileStream ... des indices – VoodooChild