Ciao a tutti,
faccio un esempio per farvi capire dove mi sono "incartato".

Ho una pagina web asp.net e vb.net.
Devo inviare 100 e-mail personalizzate, quindi una alla volta.
Nella mia pagina ho un pulsante "INVIA" ed una label che dovrà dirmi, ad esempio, inviate 25, 26, 27 ecc ecc.
La label è inserita in un update panel con un timer.

Ho affrotato il problema in questo modo:

1. ho creato un delegate che mi lancia una funzione INVIA
2. nella funzione INVIA ho creato un smtpClient.SendAsync
3. ad ogni SendCompleted vado a scrivere in un DB l'esito
4. il "timer" in maschera va a leggere il DB e mi aggiorna la label

FIN QUI TUTTO BENE. Funziona.

Ora, il mio problema è che al termine della funzione INVIA non viene richiamata la funzione di callBack agganciata al delegate.

Per prova, ho modificato la funzione INVIA con il send al posto del SendAsync , in questo modo, la funzione di callback è stata richiamata.

Sapreste dirmi come risolvere il problema mantenendo il SendAsync ?

http://www.giuliomarcante.it - Programmatore e webmaster freelance.

http://www.ebiblio-scuola.it - Gestione facile e veloce delle pagelle scolastiche
Puoi postare un po' di codice? In particolare come gestisci l'invio.

Ti ringrazio,
m.
Intanto grazie per la risposta.

Non era un prob di codice, ma di come lanciavo l'applicazione da Visual Studio.
Facevo le modifiche nel codice mentre l'applicazione era in esecuzione, salvavo, e premevo sul pulsante riavvia di Vs2008 (quello fatto come lo stop ma con la freccia che torna indietro). Così facendo non andava.
Ora, stoppando l'applicazione, e utilizzando il pulsante PLAY funziona correttamente. Buono a sapersi.


Ora il mio problema è un altro...

Vedi che nella funzione di callback vado a scrivere in una label "Invio terminato" (su qeusta label, durante l'invio, viene scritto correttamente lo stato di invio es. "inviate 5 su 11").

Quando però vado a modificare la label dalla funzione di callback vedo la proprietà text ancora = "label" che è il valore originale.
Modificando la proprietà questa non viene visualizzata in maschera.

NB: la label e gli altri controlli sono dentro degli update panel... ma anche eliminando completamente ajax, il problema rimane...


Ecco il codice:

Dim myDelegate As New MioDelegate(AddressOf myEpicentro.Invia)
myDelegate.BeginInvoke(ListaEMailDaInviare, New AsyncCallback(AddressOf FunzioneCallback), myDelegate)


Private Sub FunzioneCallback(ByVal ar As IAsyncResult)
lblSituazioneInvio.Text = "Invio terminato"
Dim d As MioDelegate = CType(ar.AsyncState, MioDelegate)
d.EndInvoke(ar)
End Sub

http://www.giuliomarcante.it - Programmatore e webmaster freelance.

http://www.ebiblio-scuola.it - Gestione facile e veloce delle pagelle scolastiche
Trovi il valore non modificato perchè la tua funzione appartiene comunque all'istanza originaria della pagina, quella che ha avviato il job, e in cui la label è ancora alla versione originale.

Ciao,
m.
Intanto grazie, la sett prossima provero' a cercare qualche soluzione (saro' fuori uff x qualche giorno).

Se avete qualche idea su come risolvere, postate pure! :-)

http://www.giuliomarcante.it - Programmatore e webmaster freelance.

http://www.ebiblio-scuola.it - Gestione facile e veloce delle pagelle scolastiche

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.
Community
Ultimi messaggi
UTENTI ONLINE
In primo piano

I più letti di oggi

Media
In evidenza
MISC