Aggiornamento dataset c#

martedì 21 settembre 2010 - 23.06
Tag Elenco Tags  C#  |  .NET 4.0  |  Windows Vista  |  Visual Studio 2010  |  Access (.mdb)

ingra83 Profilo | Newbie

Salve a tutti,
sono nuovo del forum.
Vi scirvo in quanto ho un problema con l'utilizzo del dataset collegato ad un database Access.
Preannuncio che da poco mi sono avvicinato a C#.
In pratica ho creato una classe statica affinchè la mia applicazione facesse riferimento ad una sola istanza del dataset, in quanto c'è un thread in ascolto di connesioni (attraverso socket) che aggiunge ogni nuovo utente ad una tabella del dataset e nell'applicazione c'è una classe (un COMPONENTE) che visualizza tali utenti in un datagridview.
Aggiungo l'utente in questo modo:
DataRow row = DatabaseConnection.databaseDataSet.Utenti_collegati.NewRow();
.
.
DatabaseConnection.databaseDataSet.Utenti_collegati.Rows.Add(row);
dove DatabaseConnection è la classe statica.
Se l'aggiunta avviene quando il componente non è visualizzato non rilevo nessun errore, mentre quando esso è visualizzato ho la seguente eccezione: "Eccezione first-chance di tipo 'System.InvalidOperationException' in System.Windows.Forms.dll"
che tra l'altro non riesco nemmeno a gestire. Non capisco il verificarsi di questo errore visto che entrambi le classi, il thread e il componente fanno riferimento allo stesso dataset. Una cosa è certo quando visualizzo il componente per la prima volta e nella tabella c'è già qualche utente non ottengo nessuna eccezione. Vi chiedo una mano nel risolvere questo problema visto che non sono molto pratico di c#. Ho fatto questa scelta nel memorizzare gli utenti online per sfruttare il database che uso per memorizzare altre informazioni in modo permanente.
Vi ringrazio in anticipo per ogni suggerimento che vorrete fornirmi.

---------------------Aggiornamento-------------------------------
Salve a tutti,
ho aggironato il messaggio inviato ieri sera perchè penso di aver capito il problema. Ovvero "Operazione cross-thread non valida: è stato eseguito l'accesso al controllo xxx da un thread diverso da quello da cui è stata eseguita la creazione."
Non so come risolvere visto che quando il thread aggiunge un utente viene attivato un evento del BindingSource affinchè si aggiorni il datagridview del componente.
Una cosa è certa quando non modifico nessun controllo del componente, ad esempio dei pulsanti, non catturo questa eccezione.
In entrambi i casi cmq mi ritrovo sempre l'eccezione non gestita 'System.InvalidOperationException' in System.Windows.Forms.dll"
Saluti
Raffaele

-------------------Aggiornamento-------------------------------
Ragazzi ho risolto così: "Control.CheckForIllegalCrossThreadCalls = false;"
Non credo sia una soluzione elegante, ma davvero non saprei come fare. Vi chied se è possibile utilizzare un delegate invece di utilizzare l'evento sull'oggetto BindingSource.
Grazie.
Raffaele

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