我有一个将日志写入文件的多线程应用程序。偶尔,使用此代码保存失败

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/

10-10 19:48