Principales respuestas
Utilizar un progress bar cuando ejecuto un proceso

Pregunta
-
Hola
Trabajo con Visual Studio 2015, Windows Forms
En un DataGridView cargo unos archivos xml y desde la misma grilla tengo un boton en el cual manda a procesar cada xml, los xml son enviados atravéz de un Web Service el cual me manda una respuesta.
Ese proceso toma un tiempo en el cual la app se que queda como si no estuviera haciendo nada hasta que llegue la respuesta, el código que ocupo es el siguiente.
private void dgvXml_CellClick(object sender, DataGridViewCellEventArgs e) { if (dgvXml.Columns[e.ColumnIndex].Name == "colBoton") { if (dgvXml.Rows.Count > 0 && dgvXml.CurrentRow != null) _rutaXml = Convert.ToString(dgvXml.CurrentRow.Cells[0].Value); string msg = string.Format("Se va a procesar el siguiente Comprobante Electrónico: {0} {1} {0} Nombre: {2}", Environment.NewLine, new string('-', 50), dgvXml.CurrentRow.Cells[2].Value); if (MessageBox.Show(msg, @"Aviso", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes) { var verificarConexion = Utilidades.CheckForInternetConnection(); if (!verificarConexion) { MessageBox.Show(@"No tiene conexión a Internet", @"Aviso", MessageBoxButtons.OK, MessageBoxIcon.Information); return; } //PROCESAR if (_exist && _validarFechaVencimiento) { if (AmbienteType.Prueba == _ambiente) { try { if (string.IsNullOrEmpty(_rutaXml)) { MessageBox.Show(@"Debe escoger una Factura de xml", @"Mensaje", MessageBoxButtons.OK, MessageBoxIcon.Information); return; } if (!string.IsNullOrEmpty(_claveFirma) && !string.IsNullOrEmpty(_rutaXml)) { var token = _hub.Subscribe<SelectedMensajeWsPrueba>(OnWsPruebaSelected); _sdWebServicePrueba.ValidarComprobanteAsync(_byteFirma, _claveFirma, _rutaXml); //_hub.Unsubscribe(token); } } catch (Exception ex) { MessageBox.Show($"{ex.Message}", @"Aviso", MessageBoxButtons.OK, MessageBoxIcon.Error); } } if (AmbienteType.Produccion == _ambiente) { try { if (string.IsNullOrEmpty(_rutaXml)) { MessageBox.Show(@"Debe escoger una Factura de xml", @"Mensaje", MessageBoxButtons.OK, MessageBoxIcon.Information); return; } if (!string.IsNullOrEmpty(_claveFirma) && !string.IsNullOrEmpty(_rutaXml)) { var token = _hub.Subscribe<SelectedMensajeWsProduccion>(OnWsProduccionSelected); _sdWebServiceProduccion.ValidarComprobanteAsync(_byteFirma, _claveFirma, _rutaXml); //_hub.Unsubscribe(token); } } catch (Exception ex) { MessageBox.Show($"{ex.Message}", @"Aviso", MessageBoxButtons.OK, MessageBoxIcon.Error); } } } } } } private void OnWsProduccionSelected(SelectedMensajeWsProduccion obj) { string path = string.Empty; string nombreDocumento = string.Empty; if (!string.IsNullOrEmpty(obj.EstadoRecepcionProduccion)) { if (obj.EstadoRecepcionProduccion == "DEVUELTA") { MessageBox.Show($"Identificador: {obj.Identificador} Mensaje: {obj.Mensaje1} Tipo: {obj.Tipo}", @"Aviso", MessageBoxButtons.OK, MessageBoxIcon.Information); } } if (!string.IsNullOrEmpty(obj.EstadoAutorizacionProduccion)) { if (obj.EstadoAutorizacionProduccion == "AUTORIZADO") { XElement doc = XElement.Parse(obj.Comprobante); var resultCodDoc = doc.Elements("infoTributaria") .Elements("codDoc").ToArray(); if (string.IsNullOrEmpty(resultCodDoc[0].Value)) return; var entity = _sdTipoComprobante.BuscarXCodigo(resultCodDoc[0].Value); if (entity != null) { nombreDocumento = entity.Nombre; var resultEstab = doc.Elements("infoTributaria") .Elements("estab").ToArray(); var resultPtoEmi = doc.Elements("infoTributaria") .Elements("ptoEmi").ToArray(); var resultSecuencial = doc.Elements("infoTributaria") .Elements("secuencial").ToArray(); string numero = resultEstab[0].Value + "-" + resultPtoEmi[0].Value + "-" + resultSecuencial[0].Value; switch (entity.Codigo) { case "01"://Factura var resultComprador = doc.Elements("infoFactura") .Elements("razonSocialComprador").ToArray(); var resultImporteTotal = doc.Elements("infoFactura") .Elements("importeTotal").ToArray(); var nombreFactura = entity.Nombre + "_" + numero + "_" + resultComprador[0].Value + "_" + resultImporteTotal[0].Value; var nombreFacturaXml = string.Concat(nombreFactura, ".xml"); path = Path.Combine(_rutaXmlAutorizado, nombreFacturaXml); break; case "04"://Nota de Credito var resultCompradorNotaCredito = doc.Elements("infoNotaCredito") .Elements("razonSocialComprador").ToArray(); var nombreNotaCredito = entity.Nombre + "_" + numero + "_" + resultCompradorNotaCredito[0].Value; var nombreNotaCreditoXml = string.Concat(nombreNotaCredito, ".xml"); path = Path.Combine(_rutaXmlAutorizado, nombreNotaCreditoXml); break; case "05"://Nota sw Debito var resultCompradorNotaDebito = doc.Elements("infoNotaDebito") .Elements("razonSocialComprador").ToArray(); var nombreNotaDebito = entity.Nombre + "_" + numero + "_" + resultCompradorNotaDebito[0].Value; var nombreNotaDebitoXml = string.Concat(nombreNotaDebito, ".xml"); path = Path.Combine(_rutaXmlAutorizado, nombreNotaDebitoXml); break; case "06"://Guía de Remisión var resultCompradorGuiaRemision = doc.Elements("destinatarios") .Elements("destinatario") .Elements("identificacionDestinatario").ToArray(); var nombreGuiaRemision = entity.Nombre + "_" + numero + "_" + resultCompradorGuiaRemision[0].Value; var nombreGuiaRemisionXml = string.Concat(nombreGuiaRemision, ".xml"); path = Path.Combine(_rutaXmlAutorizado, nombreGuiaRemisionXml); break; case "07"://Retención var resultSujetoRetenido = doc.Elements("infoCompRetencion") .Elements("razonSocialSujetoRetenido").ToArray(); var nombreRetencion = entity.Nombre + "_" + numero + "_" + resultSujetoRetenido[0].Value; var nombreRetencionXml = string.Concat(nombreRetencion, ".xml"); path = Path.Combine(_rutaXmlAutorizado, nombreRetencionXml); break; } //Escribe en disco CrearXml(_rutaXmlAutorizado, obj.EstadoAutorizacionProduccion, obj.NumeroAutorizacion, obj.FechaAutorizacion, obj.Ambiente, obj.Comprobante, obj.Mensajes, path); MessageBox.Show( $"Documento: {nombreDocumento} Estado: {obj.EstadoAutorizacionProduccion} Fecha: {obj.FechaAutorizacion} Ambiente: {obj.Ambiente} Comprobante: {obj.Comprobante}", @"Aviso", MessageBoxButtons.OK, MessageBoxIcon.Information); //Eliminar el Xml que se aprobo //Obtenre el nombre del Xml _rutaXml var fileNameAprobado = Path.GetFileName(_rutaXml); //Eliminar en lista de archivo Xml if (_lista.Count > 0) { _lista.RemoveAll(x => x.Nombre == fileNameAprobado); File.Delete(_rutaXml); dgvXml.DataSource = null; dgvXml.AutoGenerateColumns = false; dgvXml.DataSource = _lista; Utilidades.AutoGenerateRowNumber(dgvXml); Utilidades.FormatoDgv(dgvXml); ChangeWidthColumnXml(); } } else { MessageBox.Show(@"No se encontró Tipo de Comprobante.", @"Aviso", MessageBoxButtons.OK, MessageBoxIcon.Information); } } } _hub.ClearSubscriptions(); } private void OnWsPruebaSelected(SelectedMensajeWsPrueba obj) { string path = string.Empty; string nombreDocumento = string.Empty; if (!string.IsNullOrEmpty(obj.EstadoRecepcionPrueba)) { if (obj.EstadoRecepcionPrueba == "DEVUELTA") { MessageBox.Show($"Identificador: {obj.Identificador} Mensaje: {obj.Mensaje1} Tipo: {obj.Tipo}", @"Aviso", MessageBoxButtons.OK, MessageBoxIcon.Information); } } if (!string.IsNullOrEmpty(obj.EstadoAutorizacionPrueba)) { if (obj.EstadoAutorizacionPrueba == "AUTORIZADO") { XElement doc = XElement.Parse(obj.Comprobante); var resultCodDoc = doc.Elements("infoTributaria") .Elements("codDoc").ToArray(); if (string.IsNullOrEmpty(resultCodDoc[0].Value)) return; var entity = _sdTipoComprobante.BuscarXCodigo(resultCodDoc[0].Value); if (entity != null) { nombreDocumento = entity.Nombre; var resultEstab = doc.Elements("infoTributaria") .Elements("estab").ToArray(); var resultPtoEmi = doc.Elements("infoTributaria") .Elements("ptoEmi").ToArray(); var resultSecuencial = doc.Elements("infoTributaria") .Elements("secuencial").ToArray(); string numero = resultEstab[0].Value + "-" + resultPtoEmi[0].Value + "-" + resultSecuencial[0].Value; switch (entity.Codigo) { case "01"://Factura var resultComprador = doc.Elements("infoFactura") .Elements("razonSocialComprador").ToArray(); var resultImporteTotal = doc.Elements("infoFactura") .Elements("importeTotal").ToArray(); var nombreFactura = entity.Nombre + "_" + numero + "_" + resultComprador[0].Value + "_" + resultImporteTotal[0].Value; var nombreFacturaXml = string.Concat(nombreFactura, ".xml"); path = Path.Combine(_rutaXmlAutorizado, nombreFacturaXml); break; case "04"://Nota de Credito var resultCompradorNotaCredito = doc.Elements("infoNotaCredito") .Elements("razonSocialComprador").ToArray(); var nombreNotaCredito = entity.Nombre + "_" + numero + "_" + resultCompradorNotaCredito[0].Value; var nombreNotaCreditoXml = string.Concat(nombreNotaCredito, ".xml"); path = Path.Combine(_rutaXmlAutorizado, nombreNotaCreditoXml); break; case "05"://Nota sw Debito var resultCompradorNotaDebito = doc.Elements("infoNotaDebito") .Elements("razonSocialComprador").ToArray(); var nombreNotaDebito = entity.Nombre + "_" + numero + "_" + resultCompradorNotaDebito[0].Value; var nombreNotaDebitoXml = string.Concat(nombreNotaDebito, ".xml"); path = Path.Combine(_rutaXmlAutorizado, nombreNotaDebitoXml); break; case "06"://Guía de Remisión var resultCompradorGuiaRemision = doc.Elements("destinatarios") .Elements("destinatario") .Elements("identificacionDestinatario").ToArray(); var nombreGuiaRemision = entity.Nombre + "_" + numero + "_" + resultCompradorGuiaRemision[0].Value; var nombreGuiaRemisionXml = string.Concat(nombreGuiaRemision, ".xml"); path = Path.Combine(_rutaXmlAutorizado, nombreGuiaRemisionXml); break; case "07"://Retención var resultSujetoRetenido = doc.Elements("infoCompRetencion") .Elements("razonSocialSujetoRetenido").ToArray(); var nombreRetencion = entity.Nombre + "_" + numero + "_" + resultSujetoRetenido[0].Value; var nombreRetencionXml = string.Concat(nombreRetencion, ".xml"); path = Path.Combine(_rutaXmlAutorizado, nombreRetencionXml); break; } //Escribe en disco CrearXml(_rutaXmlAutorizado, obj.EstadoAutorizacionPrueba, obj.NumeroAutorizacion, obj.FechaAutorizacion, obj.Ambiente, obj.Comprobante, obj.Mensajes, path); MessageBox.Show( $"Documento: {nombreDocumento} Estado: {obj.EstadoAutorizacionPrueba} Fecha: {obj.FechaAutorizacion} Ambiente: {obj.Ambiente}", @"Aviso", MessageBoxButtons.OK, MessageBoxIcon.Information); //Eliminar el Xml que se aprobo //Obtenre el nombre del Xml _rutaXml var fileNameAprobado = Path.GetFileName(_rutaXml); //Eliminar en lista de archivo Xml if (_lista.Count > 0) { _lista.RemoveAll(x => x.Nombre == fileNameAprobado); File.Delete(_rutaXml); dgvXml.DataSource = null; dgvXml.AutoGenerateColumns = false; dgvXml.DataSource = _lista; Utilidades.AutoGenerateRowNumber(dgvXml); Utilidades.FormatoDgv(dgvXml); ChangeWidthColumnXml(); } } else { MessageBox.Show(@"No se encontró Tipo de Comprobante.", @"Aviso", MessageBoxButtons.OK, MessageBoxIcon.Information); } } } _hub.ClearSubscriptions(); }
¿Como puedo utilizar un progress bar mientras se envía el xml y obtengo la respuesta del Web Service?
Saludos!
Pedro Ávila
"El hombre sabio querrá estar siempre con quien sea mejor que él."
Lima - Perú
Respuestas
-
hola
>>¿Como puedo utilizar un progress bar mientras se envía el xml y obtengo la respuesta del Web Service?
ya habias planteado este tema
Mostrar ProgressBar mientras carga DataGridView
se resuelve de la misma forma
no tienes controls sobre el progreso de la invocacion al web service, solo puedes mostrar un progress con estilo marquee
saludos
Leandro Tuttini
Blog
MVP Profile
Buenos Aires
Argentina- Propuesto como respuesta Pedro AlfaroModerator viernes, 1 de febrero de 2019 16:57
- Marcado como respuesta Pedro Ávila viernes, 1 de febrero de 2019 16:58