VB窗体关闭后CSV文件仍被应用占用的问题求助
问题原因
你代码中的StreamReader对象读取完CSV文件后没有被正确释放,导致文件句柄一直被占用。因为你仅创建了sr实例但未调用Close()或Dispose()方法,且未处理异常场景下的资源释放,所以即便关闭窗体,文件也会被锁定,直到垃圾回收器自动回收该资源。
修复方案
推荐使用Using语句包裹StreamReader,它会在代码块结束后自动释放资源(无论是否发生异常),这是VB.NET中处理资源的最佳实践。
修改后的代码:
Private Sub Btn_brow_Click(sender As Object, e As EventArgs) Handles Btn_brow.Click Dim ofd As New OpenFileDialog Dim dt As New DataTable Try With ofd .Filter = "CSV files(*.csv)|*.csv" .FilterIndex = 1 .Title = "Import data from CSV File" End With If ofd.ShowDialog() = DialogResult.OK Then txtLocation.Text = ofd.FileName ' 使用Using语句自动释放StreamReader资源 Using sr As New IO.StreamReader(ofd.FileName) Dim newline() As String = sr.ReadLine.Split(";"c) dt.Columns.AddRange({New DataColumn(newline(0)), New DataColumn(newline(1)), New DataColumn(newline(2)), New DataColumn(newline(3))}) While (Not sr.EndOfStream) newline = sr.ReadLine.Split(";"c) Dim newrow As DataRow = dt.NewRow newrow.ItemArray = {newline(0), newline(1), newline(2), newline(3)} dt.Rows.Add(newrow) End While Dgv_Import.DataSource = dt End Using ' 自动调用sr.Dispose(),释放文件句柄 End If Catch ex As Exception MessageBox.Show(ex.Message) End Try End Sub
如果不想使用Using,也可以手动调用Close()和Dispose(),但需确保所有执行路径(包括异常场景)都能触发资源释放:
' 读取完成后添加: sr.Close() sr.Dispose() ' 同时在Catch块中补充处理: Catch ex As Exception If sr IsNot Nothing Then sr.Close() sr.Dispose() End If MessageBox.Show(ex.Message)
相比手动释放,Using方式更简洁安全,无需手动处理各类边界情况。
内容的提问来源于stack exchange,提问作者GuidoM.
相关产品推荐
相关产品推荐

