none
Realizar 2 Procesos Simultaneos RRS feed

  • Pregunta

  • Buen día, estoy realizando un proceso de envío de email y a la vez impresiones.

    Entonces miro si el dato correo es Null Imprimo si no Envío Correo.

    El Enviar un correo desde la aplicación tarda entre 5 a 10 seg, e esos 10 segundos que puede tardar ya se habrían impreso 10 documentos.

    Entonces lo que hice fue un backgroundWorker donde lanzo un form que dice enviando mail y por el otro lado imprime.

    he hay el problema, envía el email y a su vez imprime la factura actual, solo esa y las demás quedan en cola hasta que termine de enviar el correo y la idea es que en esos 10 segundos envie 10 impresiones con otro proceso, o es que el backgroundworker no funciona asi? tenia que haber usado threads o task??


    • Editado CrissR miércoles, 1 de abril de 2015 17:56
    • Cambiado Karen Malagón lunes, 6 de abril de 2015 21:27 Windows Forms issue
    miércoles, 1 de abril de 2015 17:56

Todas las respuestas

  • >>la idea es que en esos 10 segundos envie 10 impresiones con otro proceso, o es que el backgroundworker no funciona asi?

    si ejecutas el backgroundworker.RunWorkerAsync() en reiteradas oportunidades lanzaras el proceso varias veces

    la operatoria que quieres hacer en otro proceso la defines en el evento DoWork

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    miércoles, 1 de abril de 2015 18:07
  • >>la idea es que en esos 10 segundos envie 10 impresiones con otro proceso, o es que el backgroundworker no funciona asi?

    si ejecutas el backgroundworker.RunWorkerAsync() en reiteradas oportunidades lanzaras el proceso varias veces

    la operatoria que quieres hacer en otro proceso la defines en el evento DoWork

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    Hola Leandro, asi lo hago, mira el codigo

    public partial class EnvioMail : Form
        {
            private readonly List<string> _listaCorreos;
            private readonly string _asunto;
            private readonly byte[] _adjunto;
    
            public EnvioMail(List<string> listaCorreos, string asunto, byte[] adjunto, string nombre)
            {
                _listaCorreos = listaCorreos;
                _asunto = asunto;
                _adjunto = adjunto;
    
                InitializeComponent();
                nombreLbl.Text = nombre;
                var bgw = new BackgroundWorker();
                bgw.DoWork += bgw_DoWork;
                bgw.RunWorkerCompleted += bgw_RunWorkerCompleted;
                bgw.RunWorkerAsync();
            }
    
            void bgw_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
            {
                Close();
            }
    
            void bgw_DoWork(object sender, DoWorkEventArgs e)
            {
                EnviaEmail(_listaCorreos,_asunto,_adjunto);
            }

    hay con eso en segundo plano envio el mail, y desde aquí lo lanzo

    void ImprimirFactura2(object sender, PrintPageEventArgs e)
            {
    
                Factura factura = FacturaLst[_numpag];
    
                if (factura.Email.Length > 0)
                {
                    var algo = GeneraFacturaPdf(factura);
                    var listCorreos = new List<string> { factura.Email };
                    var envioEmail = new EnvioMail(listCorreos, "Asunto", algo, factura.Nombre);
                    envioEmail.ShowDialog();                
                }
    ImprimirFactura 2 es donde imprimo la factura pero antes mira si es por email y si es asi lanza el proceso, pero como indico envía la factura y en un segundo proceso envía una factura y las demás quedan en cola.

    miércoles, 1 de abril de 2015 18:24
  • pero alli solo estas lanzando un solo proceso a la vez, ya que la logica la tienes dentro delform que abres como modal

    la logica del form y la del envio del mail deberian estar sepadas

    no lanzas el proceso de envio de mail desde dentro del form EnvioMail, no si quieres realizar varios procesos en simultaneo

    el form de envio de mail solo es representativo no deberia tener logica dentro del mismo, antes de lanzar el BackgroundWorker muestra ese form y lo cierras en el RunWorkerCompleted pero lo realizas por fuera

    asi como lo tienes el hecho que el form sea modal te condiciona a que solo puedes lanar un unico proceso ya que alli se detiene la ejecucion

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina


    miércoles, 1 de abril de 2015 19:55
  • pero alli solo estas lanzando un solo proceso a la vez, ya que la logica la tienes dentro delform que abres como modal

    la logica del form y la del envio del mail deberian estar sepadas

    no lanzas el proceso de envio de mail desde dentro del form EnvioMail, no si quieres realizar varios procesos en simultaneo

    el form de envio de mail solo es representativo no deberia tener logica dentro del mismo, antes de lanzar el BackgroundWorker muestra ese form y lo cierras en el RunWorkerCompleted pero lo realizas por fuera

    asi como lo tienes el hecho que el form sea modal te condiciona a que solo puedes lanar un unico proceso ya que alli se detiene la ejecucion

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina



    Hola Leandro, lo hago asi pq solo lanzo el formulario cuanod hay envio de email, de lo contrario solo impresiones, la idea es que mientras haya envio de email siga imprimiendo, o como seria? no entendí lo que dices.
    miércoles, 1 de abril de 2015 20:18
  • y el envio de mail tambien lo lanzas en un BackgroundWorker ?

    porque sino entiendo que el ShowDialog() detiene alli el proceso y te quedas hasta que se cierre la ventana


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    miércoles, 1 de abril de 2015 20:42
  • y el envio de mail tambien lo lanzas en un BackgroundWorker ?

    porque sino entiendo que el ShowDialog() detiene alli el proceso y te quedas hasta que se cierre la ventana


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina


    Si Leandro, al abrir el form enviando hay hace el envio de Email, que es lo que me falla?
    jueves, 2 de abril de 2015 20:10