Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. 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


In attesa di tempi migliori...
viviamoci questi.
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()"


Il software è come il sesso, è meglio quando è libero.
Linus Torvalds, Conferenza della Free Software Foundation, 1996 (attribuito)

Non provare mai a spiegare il computer a un profano. È più facile spiegare il sesso a una vergine.
Robert Anson Heinle
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


In attesa di tempi migliori...
viviamoci questi.
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:


In attesa di tempi migliori...
viviamoci questi.
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:


In attesa della fine del mondo, fissata per l'anno prossimo, sono alla ricerca di un notaio con cui fare testamento...
PM Quote