我有一个将日志写入文件的多线程应用程序。偶尔,使用此代码保存失败
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
我收到的错误消息
我可以通过其他哪种方式确保安全?
最佳答案
Dim objLock As New Object
您的SyncLock语句不会锁定任何内容。每个线程都将获得其自己的objLock实例,因为它是一个局部变量,并且在每次输入该方法时都会被分配。将声明移到方法之外,使其成为您的类的成员。并确保该类只有一个实例。或将其设为ReadOnly。
关于vb.net - vb.net在多线程应用程序中写入文件失败,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6655733/