2010-09-03 19 views
5

tengo este método:Obteniendo un Stream desde una ruta absoluta?

public RasImage Load(Stream stream);

si quiero cargar una URL como:

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

¿Cómo puedo hacer que esta URL a un arroyo y pasarlo a mi load ¿método?

Respuesta

4

Aquí hay una manera. Realmente no sé si es la mejor manera o no, pero funciona.

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

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

ACTUALIZACIÓN: Parece que en Silverlight, la clase WebRequest no tiene un método GetResponse; no tienes más remedio que hacer esto de forma asíncrona.

A continuación se muestra un ejemplo de código que ilustra cómo puede hacerlo. (Te lo advierto: escribí esto hace un momento, sin pensar demasiado en lo sensato que es. La forma en que elijas implementar esta funcionalidad probablemente sea bastante diferente. De todos modos, al menos esto debería darte una idea general de lo que necesitas hacer)

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 enfoque similar, pero más corto sería utilizar 'WebClient.OpenRead'. –

+0

@Fredrik: Bien, no sabía de eso. Va a mostrar que casi siempre hay más de una manera de despellejar a un gato. –

+0

Chicos, estos métodos no parecen estar en System.Net para Silverlight, ninguna pista ... 'request.GetRespone())' o 'WebClient.OpenRead' No puedo usarlos – VoodooChild

4

La respuesta de Dan es buena, aunque usted está solicitando de localhost. ¿Es este un archivo al que puedes acceder desde el sistema de archivos? Si es así, creo que debe ser capaz de pasar simplemente en un FileStream:

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

Parece que localhost path fue solo un ejemplo: es probable que quiera descargar imágenes de Internet y manipularlas localmente. No es que alguna vez haga tales cosas> _> – JustLoren

+0

Buena captura en la parte localhost; Ni siquiera me había dado cuenta. –

+0

Cuando lo cambio a un sistema de archivos local me sale 'No se permite el funcionamiento del archivo. Se niega el acceso a la ruta '../images/Icons/thumb.gif' en el FileStream ... cualquier pista – VoodooChild

Cuestiones relacionadas