我有一个将日志写入文件的多线程应用程序。偶然,使用此代码保存失败
Friend Sub SaveToText(ByVal FileName As String, ByVal Text As String)
'// create a writer and open the file
Dim objLock As New Object
SyncLock objLock
Dim tw As TextWriter = Nothing
Try
'// write a line of text to the file
tw = New StreamWriter(FileName, True)
tw.Write(Text)
Catch ex As Exception
MessageBox.Show(ex.Message, "Error saving", _
MessageBoxButtons.OK, _
MessageBoxIcon.Error)
Finally
'// close the stream
If tw IsNot Nothing Then
tw.Close()
tw.Dispose()
End If
End Try
End SyncLock
End Sub
我收到错误消息
该进程无法访问文件'error.log',因为它正在存在 被另一个过程使用。
我可以采用哪种其他方式使其安全?
答案 0 :(得分:6)
Dim objLock As New Object
您的SyncLock语句不会锁定任何内容。每个线程都将获得自己的objLock实例,因为它是一个局部变量,并在每次输入方法时分配。将声明移到方法之外,使其成为您班级的成员。并确保该类只有一个实例。或者让它共享ReadOnly。