Se eseguo l' analisi del codice, relativamente a questa funzione, che ritorna il testo di un file:
ottengo tre avvisi:codice:Private Function LeggeLogFile() As String Dim LogFile As String Try Dim fs As FileStream = New FileStream(My.Settings.LogPath & "\LogFile.txt", _ FileMode.Open, FileAccess.Read, FileShare.ReadWrite) Dim sr As StreamReader = New StreamReader(fs) fs.Seek(0, SeekOrigin.Begin) LogFile = sr.ReadToEnd() sr.Close() fs.Close() Return LogFile Catch ex As Exception Return Nothing End Try End Function
e questo:Avviso 41 CA2000 : Microsoft.Reliability : Nel metodo 'frmMain.LeggeLogFile()' chiamare System.IDisposable.Dispose sull'oggetto 'fs' prima che tutti i relativi riferimenti siano esterni all'ambito.
e questo:Avviso 43 CA2202 : Microsoft.Usage : L'oggetto 'fs' può essere eliminato più volte nel metodo 'frmMain.LeggeLogFile()'. Per evitare di generare System.ObjectDisposedException, è consigliabile chiamare Dispose su un oggetto non più di una volta
Per cercare di rimediare al primo avviso ho pensato di modificare il codice così:Avviso 42 CA1822 : Microsoft.Performance : Il parametro 'this' (o 'Me' in Visual Basic) di 'frmMain.LeggeLogFile()' non è mai utilizzato. Contrassegnare il membro come static (o Shared in Visual Basic) o utilizzare 'this'/'Me' nel corpo del metodo o almeno una funzione di accesso delle proprietà, se appropriato.
ma ottengo un ulteriore avviso che mi dice che la variabile fs (in Finally) viene utilizzata prima che le sia stato assegnato un valore.codice:Private Function LeggeLogFile() As String Dim LogFile As String Dim fs As FileStream Try fs = New FileStream(My.Settings.LogPath & "\LogFile.txt", FileMode.Open, _ FileAccess.Read, FileShare.ReadWrite) Dim sr As StreamReader = New StreamReader(fs) fs.Seek(0, SeekOrigin.Begin) LogFile = sr.ReadToEnd() sr.Close() Return LogFile Catch ex As Exception Return Nothing Finally fs.Close() End Try End Function
Riguardo al secondo avviso proprio non vedo dove fs possa essere chiusa più volte.
Il terzo è letteralmente arabo...![]()
Ty for any info

Rispondi quotando