[c#] Problema con xmldocument chiudendo e riaprendo il form...

giovedì 10 luglio 2008 - 20.53

program Profilo | Junior Member

Ciao,
ho un form dove vengono letti dei dati da un foglio xml.
Questo form per leggere usa una classe e in particolare un metodo preciso creato da me.

Il metodo di lettura utilizza un XmlDocument.

Allora, se durante il ciclo di vita dell'applicazione apro il form una prima volta tutto fila liscio e mi vengono visualizzati i dati.
Se lo chiudo attraverso this.Close(); e lo riapro appena vado a leggere mi viene questa eccezione causando errore:

IOEXCEPTION non è stata gestita
Il processo non può accedere al file 'D:\developers.xml' perché è in uso da un altro processo.

Ecco lo spezzone di codice della lettura:

XmlDocument Doc = new XmlDocument(); try { Doc.Load(this.path); //qui scatta l'errore con l'eccezione ... foreach (XmlNode node in Doc.SelectNodes("/nodo/nodo")) { //legge e stampa su form } ....


Cosa sbaglio? Devo forse richiamare un evento di chiusura del file aperto da XmlDocument?

Grazie.

Enne Profilo | Junior Member

Ciao,
Il metodo Load automaticamente chiude il file dopo averlo caricato, quindi puoi postare il codice intero?

Rocco Verrastro
.NET Programmer - Web Developer

program Profilo | Junior Member

Credo di aver risolto....
In pratica ho due form.
Uno che mi legge il contenuto del file...e questo attraverso un file system watcher. Quindi un thread che ogni volta che si accorge che il file è cambiato mi ricarica tutto chiamando il metodo load della classe apposita.

Nel secondo form invece pesco un record dal form di lettura e lo modifico.

Molto probabilmente quando chiudevo i due form e li riaprivo (prima quello di lettura e poi quello per la modifica di un record) (l'evento si scatena quando clicco Modifica record nel secondo form) le due letture si sovrappongono e una delle due non puo accedere al file.

Ho messo quindi un catch IOException e al suo interno ho richiamato load() in modo che se si riverifica riprova a accedere fino a che non ha finito.
In questo modo ora non mi da nessun errore...
Non ho capito pero perche non si verifica anche la prima volta che apro il form di lettura e faccio le modifiche ai record.....

Non deve essere il massimo come soluzione ma non credo di creare dei loop infiniti tipo colli di bottiglia....

Qualche consiglio?
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