Home Page
Articoli
Tips & Tricks
News
Forum
Archivio Forum
Blogs
Sondaggi
Rss
Video
Utenti
Chi Siamo
Contattaci
Username:
Password:
Login
Registrati ora!
Recupera Password
Home Page
Stanze Forum
App. WinForms / WPF .NET
Aggiornamento dataset c#
martedì 21 settembre 2010 - 23.06
Elenco Threads
Stanze Forum
Aggiungi ai Preferiti
Cerca nel forum
Elenco Tags
C#
|
.NET 4.0
|
Windows Vista
|
Visual Studio 2010
|
Access (.mdb)
ingra83
Profilo
| Newbie
1
messaggi | Data Invio:
mar 21 set 2010 - 23:06
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
Torna su
Stanze Forum
Elenco Threads
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 !