Estás en: Web Service Async
Para dar las gracias debes entrar o registrarte en el foro
Tengo el siguiente problema , estoy invocando un webService conversor de monedas en una clase , el valor arrojado lo debo usar para realizar calculos , pero al ser una llamada Asincrona del Servicio , el programa no funciona correctamente ya que no alcanza a hacer la operacion cuando mando la respuesta como parametro para otra clase.
public class ArrojaPeso
{
public ConversorMoneda.Currency divisaExtranjera;
public double cifra;
public ArrojaPeso(string moneda)
{
this.divisaExtranjera = Constantes.devuelveNombreMoneda(moneda);
}
public void convierteAPeso(double valor)
{
ConversorMoneda.CurrencyConvertorSoapClient cliente = new ConversorMoneda.CurrencyConvertorSoapClient();
cliente.ConversionRateCompleted += new EventHandler(cliente_ConversionRateCompleted);
cliente.ConversionRateAsync(ConversorMoneda.Currency.USD, ConversorMoneda.Currency.COP);
}
void cliente_ConversionRateCompleted(object sender, ConversorMoneda.ConversionRateCompletedEventArgs e)
{
this.cifra=e.Result;
}
}
alejofila escribió:Tengo el siguiente problema , estoy invocando un webService conversor de monedas en una clase , el valor arrojado lo debo usar para realizar calculos , pero al ser una llamada Asincrona del Servicio , el programa no funciona correctamente ya que no alcanza a hacer la operacion cuando mando la respuesta como parametro para otra clase.
- Código: Seleccionar todo
public class ArrojaPeso
{
public ConversorMoneda.Currency divisaExtranjera;
public double cifra;
public ArrojaPeso(string moneda)
{
this.divisaExtranjera = Constantes.devuelveNombreMoneda(moneda);
}
public void convierteAPeso(double valor)
{
ConversorMoneda.CurrencyConvertorSoapClient cliente = new ConversorMoneda.CurrencyConvertorSoapClient();
cliente.ConversionRateCompleted += new EventHandler(cliente_ConversionRateCompleted);
cliente.ConversionRateAsync(ConversorMoneda.Currency.USD, ConversorMoneda.Currency.COP);
}
void cliente_ConversionRateCompleted(object sender, ConversorMoneda.ConversionRateCompletedEventArgs e)
{
this.cifra=e.Result;
}
}
El problema es que el e.Result no me lo retorna a tiempo ya que es una llamada Asincrona , por lo que he visto debo utilizar Hilos para resolver este problema , pero no encuentro una solucion concreta , Gracias de ante mano
Gracias por la resupuesta . El problema no es ese , sino que esa clase que cite es invocada por mi clase control y a su vez esta es invocada dentro de una PhoneApplicationPage , y con el valor retornado deberia hacer unos calculos y enviarlos como parametros a otra pagina . El problema es que cuando envia los parametros todavia no ha retornado lo que me deberia retornar el WebService . Podrias Darme una mano , entiendo que debo declarar de alguna forma que no envie los parametros hasta que NO haya llegado la respuesta, pero no se hacerlo.
alejofila escribió:Gracias por la resupuesta . El problema no es ese , sino que esa clase que cite es invocada por mi clase control y a su vez esta es invocada dentro de una PhoneApplicationPage , y con el valor retornado deberia hacer unos calculos y enviarlos como parametros a otra pagina . El problema es que cuando envia los parametros todavia no ha retornado lo que me deberia retornar el WebService . Podrias Darme una mano , entiendo que debo declarar de alguna forma que no envie los parametros hasta que NO haya llegado la respuesta, pero no se hacerlo.
Entiendo tu solucion , pero yo quisiera que el codigo entre la vista y la logica no se mezclara tanto , y eso que tu sugieres propone que la conexion al webService la haga directamente en la PhonePage . No habria una solucion que me permitiera llamar a el metodo de mi clase arrojaPeso desde mi PhonePage?
alejofila escribió:Entiendo tu solucion , pero yo quisiera que el codigo entre la vista y la logica no se mezclara tanto , y eso que tu sugieres propone que la conexion al webService la haga directamente en la PhonePage . No habria una solucion que me permitiera llamar a el metodo de mi clase arrojaPeso desde mi PhonePage?