Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C# / VB.NET - incremento ritardato di un label
Forum - C# / VB.NET - incremento ritardato di un label

Avatar
rocco8620 (Normal User)
Newbie


Messaggi: 3
Iscritto: 17/07/2012

Segnala al moderatore
Postato alle 17:05
Lunedì, 30/07/2012
Buongiono a tutti,
ho creato un programma che permette di gestire una mail list e ho inserito la funzione di invio "automatico" delle email prelevando l' indirizzo da una listbox e incrementando di 1 un label che funziona da contatore. Il problema che si verifica è che l' aggiornamento del label avviene in ritardo,cioè se devo inviare 10 mail il label sembra bloccato a 0 poi passa di colpo a 10 quando l' invio delle mail è completato.
come posso fare in modo che il label venga incrementato correttamente?

questo è il codice che uso per l' invio delle mail:

Codice sorgente - presumibilmente VB.NET

  1. Imports System.IO
  2. Imports System.Net.
  3.     Dim sendcount As Integer
  4.     Dim sendcounttotal As Integer
  5.  
  6.  
  7. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
  8.    
  9. sendcounttotal = Form1.ListBox2.Items.Count
  10.         Label1.Text = "Invio 00 di " & sendcounttotal
  11.         Try
  12.                 For i As Integer = 0 To .Items.Count - 1
  13.                     Dim MyMailMessage As New MailMessage()
  14.                     MyMailMessage.From = New MailAddress(.TextBox7.Text)
  15.                     MyMailMessage.To.Add(.Items(i))
  16.                     MyMailMessage.Subject = (TextBox9.Text)
  17.                     MyMailMessage.Body = (Form1.textomail)
  18.                     Dim SMTPServer As New SmtpClient("Smtp.gmail.com")
  19.                     SMTPServer.Port = 587
  20.                     SMTPServer.Credentials = New     System.Net.NetworkCredential(TextBox7.Text, TextBox8.Text)
  21.                     SMTPServer.EnableSsl = True
  22.                     SMTPServer.Send(MyMailMessage)
  23.                     sendcount = sendcount + 1
  24.                     Label1.Text = "invio " & sendcount & " di " & sendcounttotal
  25.                 Next
  26.             End With
  27.  
  28.              MsgBox("Mail inviate correttamente!")
  29.  
  30.         Catch ex As Exception
  31.            MsgBox("Errore nell' invio delle mail", MsgBoxStyle.Critical)
  32.         End Try
  33.  
  34. end sub


Ultima modifica effettuata da rocco8620 il 30/07/2012 alle 17:06
PM Quote
Avatar
walker93 (Member)
Expert


Messaggi: 460
Iscritto: 31/01/2010

Segnala al moderatore
Postato alle 18:03
Lunedì, 30/07/2012
prima di terminare il ciclo con next iserisci un "Application.DoEvents()"

PM Quote
Avatar
rocco8620 (Normal User)
Newbie


Messaggi: 3
Iscritto: 17/07/2012

Segnala al moderatore
Postato alle 18:59
Lunedì, 30/07/2012
Inserendo il comando che mi hai specificato il label si aggiorna correttamente,
ma sorge un altro problema, il contatore (i) che si occupa di contare le mail inviate si "ferma" a 2 provocando il mancato invio di tutte le mail successive. la cosa strana è che inserendo il comando
Codice sorgente - presumibilmente Plain Text

  1. Msgbox(sendcounttotal)

subito dopo il comando
Codice sorgente - presumibilmente Plain Text

  1. sendcounttotal = Form1.ListBox2.Items.Count

mi viene mostrato il numero di items presenti nella listbox invece se inserisco
Codice sorgente - presumibilmente Plain Text

  1. Msgbox(.items.count -1)

dopo il comando
Codice sorgente - presumibilmente VB.NET

  1. For i As Integer = 0 To .Items.Count - 1

nel messaggio mi compare "2", come posso rissolvere?

Ultima modifica effettuata da rocco8620 il 30/07/2012 alle 19:02
PM Quote
Avatar
rocco8620 (Normal User)
Newbie


Messaggi: 3
Iscritto: 17/07/2012

Segnala al moderatore
Postato alle 22:56
Lunedì, 30/07/2012
Ho risolto il problema, avevo sbagliato il riferimento alla listbox2 inpostando il recupero dei dati dalla listbox1.

grazie per il tuo aiuto riguardo al label :k:

PM Quote
Avatar
Renny (Normal User)
Expert


Messaggi: 231
Iscritto: 30/07/2011

Segnala al moderatore
Postato alle 12:16
Martedì, 31/07/2012
Ciao..
Anche se hai risolto, magari puoi essere interessato a una soluzione formalmente più corretta.
Per fare quello che richiedi dovresti usare un controllo backgroundWorker che permette di gestire le operazioni (invio email e aggiornamento interfaccia programma) come 2 thread separati.
Il controllo è fatto apposta per eseguire operazioni ripetute (tramite ciclo) e mostrare sullo schermo l'avanzamento % di tali operazioni all'utente, magari tramite progress bar anche.
Per una spiegazione del controllo leggiti questo link, che è l'ottima guida di Totem per vb.net
http://www.pierotofy.it/pages/guide/Guida_al_Visual_Basic_ ...

Ciao!:k:

PM Quote