*** NEGATIVO ***
La routine funge perfettamente (come d' altronde la mia), ma crea ugualmente avviso.
Fai questa velocissima prova: nuovo progetto ==> Windows Form, inserisci questo codice:
codice:
Imports System.IO
Public Class Form1
Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
Dim File As String = LeggeLogFile()
End Sub
Private Shared Function LeggeLogFile() As String
Try
Using fs As FileStream = New FileStream("MFile", FileMode.Open, _
FileAccess.Read, FileShare.ReadWrite)
Using sr As StreamReader = New StreamReader(fs)
Return sr.ReadToEnd()
End Using
End Using
Catch ex As Exception
Return Nothing
End Try
End Function
End Class
Se lanci l' analisi ottieni questo avviso:
codice:
Avviso1 CA2202 : Microsoft.Usage : L'oggetto 'fs' può essere eliminato più volte nel
metodo 'Form1.LeggeLogFile()'. Per evitare di generare System.ObjectDisposedException, è
consigliabile chiamare Dispose su un oggetto non più di una volta.: Lines: 19
Ove la linea 19 è il secondo End Using
Mi sa tanto che l' esempio di MSDN, con l' eliminazione condizionale di fs, sia quello giusto...
EDIT
Eliminando il secondo Using:
codice:
Using fs As FileStream = New FileStream("MFile", FileMode.Open, _
FileAccess.Read, FileShare.ReadWrite)
Dim sr As StreamReader = New StreamReader(fs)
Return sr.ReadToEnd()
End Using
è sparito l' avviso.... può essere che sr venga portato automaticamente a nothing portando a nothing fs all' uscita del blocco Using????
Dovrebbe essere così... l' alternativa è che l' analisi di VS2010 sia sballata.
.
.