Vi prego aiutatemi perchè sto impazzendo

martedì 03 marzo 2009 - 16.14

giamisan Profilo | Newbie

Ciao a tutti, premetto che non sono un mostro nella programmazione....anzi, direi quasi più un caprone, però bene o male documentandomi qua e la sono sempre riuscito a fare quello che volevo magari impiegandoci il triplo del tempo ma ce l'ho fatta.
E' da un po' che avevo abbandonato il mio progetto VB.NET per diversi motivi, ma ora dato che il tempo me lo permette ci sto riprovando ed è tra 3 giorni che sono fermo allo stesso punto dove ero fermo 1 anno fa!!!

Il problema è nato dal fatto che quando ho steso il programma, su un computer con single core, il tutto girava perfettamente ma ora che ho il QuadCore no.

Vi descrivo il problema: quando lancio il form principale del programma non viene eseguita alcuna operazione. Per poter eseguire operazioni è necessario popolare un'anagrafica per la quale ho adottato un db SQL. Per popolare questa anagrafica utilizzo un secondo form accessibile dal primo.
Nell'evento LOAD di questo secondo form ho inserito la creazione di un thread all'interno del quale vengono creati 2 oggetti (app e conn) che mi servono per riempire il db e viene riempita la datagrid con gli oggetti già presenti nel db.
Fin qui tutto ok, l'aggiunta, la rimozione, la modifica ed il salvataggio di record nel database funzionano in maniera perfetta.

Vi è poi il classico bottone "ESCI" il quale oltre che a chiudere il form ha il compito di cessare il thread precedentemente aperto e tramite il metodo Dispose rilasciare le risorse trattenute dai 2 oggetti precedentemente creati nel thread.

Ora, potrebbe capitera che mi dimentichi di inserire taluni record in questo db e che quindi sia ricostratto a lanciare il form2 per la seconda volta e qui c'è l'inghippo che ho la netta sensazione sia dovuto ad un problema di rilascio della memoria.

Nel caso in cui, al bottone ESCI, associo il seguente codice:

Private Sub btnEsc_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnEsc.Click
Me.Dispose()
t.Abort()
End Sub

quando poi provo a riapre il form2 viene sollevato il seguente errore: "Imppossbile creare più di un oggetto del tipo app e conn"

Questo logicamente mi accade perchè teoricamente alla Sub Click di btnEsc mancano queste 2 righe:

app.Dispose()
conn.Dispose()

infatti se io le inserisco questo tipo di errore sparisce ma purtroppo ne compare un altro che mi dice: System.AccessViolationException {"Tentativo di lettura o scrittura della memoria protetta. Spesso questa condizione indica che altre parti della memoria sono danneggiate."}

Non pretendo affatto che mi diate il codice per risolvere il problema, ma per lo meno una dritta per trovare la via migliore attraverso cui risolverlo, sia essa utilizzando il metodo Dispose (2° variante del codice) sia non utilizzandolo.


Grazie mille a tutti
Giacomo




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-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5