[VB.NET] BackgroundWorker - "OperationCompleted è già stato chiamato s...

mercoledì 13 novembre 2013 - 20.58
Tag Elenco Tags  VB.NET  |  .NET 4.0  |  Windows 7  |  Visual Studio Express  |  MySQL 5.5

FaN7aSy Profilo | Newbie

Buonasera, Sto scrivendo un piccolo programma per interfacciarmi ad un database mysql. Il database ha 3 tabelle: giochi, clienti, ordini. Nel programma ho quindi 3 tab, 1 per ogni tabella. Ho cominciato occupandomi della tabella giochi. Per la funzione di caricamento utilizzo un backgrounworker, così da non bloccare il programma. Il tutto funziona alla perfezione. Poi ho implementato un pulsante per aggiungere un nuovo record dal programma. Dopo aver eseguito la query, richiamo di nuovo il backgroundworker che mi aggiorna quindi i risultati visualizzati. Anche qui tutto funziona benissimo.
A questo punto iniziano il mio problema. Sono passato alla scheda relativa alla tabella clienti, ma visto che il processo da eseguire è pressappoco identico, non ho fatto altro che creare un altro BackgroundWorker, e ho copiato-incollato lo stesso codice che utilizzavo per la tabella giochi nei 3 eventi del BackgroundWorker (DoWork,ProgressChanged,RunWorkerCompleted), ovviamente cambiando la tabella da cui leggere e le varie colonne. Anche qui tutto funziona benissimo. A questo punto ho "duplicato" anche il pulsante per aggiungere un record. Il codice anche l'ho ricopiato ma qui succede qualcosa che non capisco. Se vado ad aggiungere un nuovo cliente, funziona tutto fino al momento dell'aggiunta, ma quando dopo aver aggiunto il record, richiamo il backgroundworker per aggiornare i risultati, mi restituisce il seguente errore:

"OperationCompleted è già stato chiamato sull'operazione. Non sono consentite ulteriori chiamate."

L'esecuzione della query di aggiunta avviene correttamente, perchè alla riapertura del programma o al controllo diretto del database, risulta la riga inserita. Quindi il problema dovrebbe essere nell'evento DoWork del secondo BackgroundWorker (BW_CaricaClienti)
Adesso mi chiedo: per quale motivo mi da questo errore solo nel caso del 2o backgroundworker, visto che è stato tutto copiato per filo e per segno dal 1o BackgroundWorker? E poi cosa significa questo errore? Di seguito riporto il codice completo del programma.

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

Grazie a tutti,
Gianmarco

Vinsent Profilo | Senior Member

Sinceramente non saprei....ad occhio vedo solo un Dispose sul BW in questione nel click del button clienti, in teoria lo "distruggi" e non dovresti essere in grado di riutilizzarlo...

FaN7aSy Profilo | Newbie

Maledetto copia e incolla! Oltre quel problema del dispose, ho notato che avevo lasciato qualche riga che faceva rifermento all'altro BW. In particolare questa:

BW_CaricaGiochi.ReportProgress(((scaricati / totclienti) * 100))

Ho ricontrollato per bene il tutto, e a mente fresca mi sono accorto che avevo lasciato qualcosa che invece dovevo cambiare con i relativi oggetti dei clienti.

Grazie per avermi fatto notare (indirettamente) questi errori! :D

A presto,
Gianmarco
Rino Gaetano Regna Sovrano!
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2025
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5