积极答复者
多线程写文件

问题
-
如何多线程调用下面的方法不产生冲突
Private Sub WriteEmailTxt(ByVal email As String)
Dim fs As New FileStream(Application.StartupPath & "\email.txt", FileMode.OpenOrCreate, FileAccess.Write)
Dim m_streamWriter As New StreamWriter(fs)
m_streamWriter.BaseStream.Seek(0, SeekOrigin.[End])
m_streamWriter.WriteLine(email)
m_streamWriter.Flush()
m_streamWriter.Close()
fs.Close()End Sub
答案
-
你好 可以添加个lock
Private Shared ReadOnly Property InternalSyncObject As Object
Get
If (s_InternalSyncObject Is Nothing) Then
Dim obj2 As New Object
Interlocked.CompareExchange((s_InternalSyncObject), obj2, Nothing)
End If
Return s_InternalSyncObject
End Get
End PropertyDim s_InternalSyncObject As Object
Private Sub WriteEmailTxt(ByVal email As String)SyncLock InternalSyncObject
Dim fs As New FileStream(Application.StartupPath & "\email.txt", FileMode.OpenOrCreate, FileAccess.Write)
Dim m_streamWriter As New StreamWriter(fs)
m_streamWriter.BaseStream.Seek(0, SeekOrigin.[End])
m_streamWriter.WriteLine(email)
m_streamWriter.Flush()
m_streamWriter.Close()
fs.Close()End SyncLock
End Sub
Wenn ich dich hab’,gibt es nichts, was unerträglich ist.坚持不懈!http://hi.baidu.com/1987raymond- 已标记为答案 江郎才尽 2009年10月13日 8:33
全部回复
-
Private syncRoot As Object = New [Object]() Private Sub WriteEmailTxt(ByVal email As String) SyncLock syncRoot Dim fs As New FileStream(Application.StartupPath & "\email.txt", FileMode.OpenOrCreate, FileAccess.Write) Dim m_streamWriter As New StreamWriter(fs) m_streamWriter.BaseStream.Seek(0, SeekOrigin.[End]) m_streamWriter.WriteLine(email) m_streamWriter.Flush() m_streamWriter.Close() fs.Close() End SyncLock End Sub
知识改变命运,奋斗成就人生! -
你好 可以添加个lock
Private Shared ReadOnly Property InternalSyncObject As Object
Get
If (s_InternalSyncObject Is Nothing) Then
Dim obj2 As New Object
Interlocked.CompareExchange((s_InternalSyncObject), obj2, Nothing)
End If
Return s_InternalSyncObject
End Get
End PropertyDim s_InternalSyncObject As Object
Private Sub WriteEmailTxt(ByVal email As String)SyncLock InternalSyncObject
Dim fs As New FileStream(Application.StartupPath & "\email.txt", FileMode.OpenOrCreate, FileAccess.Write)
Dim m_streamWriter As New StreamWriter(fs)
m_streamWriter.BaseStream.Seek(0, SeekOrigin.[End])
m_streamWriter.WriteLine(email)
m_streamWriter.Flush()
m_streamWriter.Close()
fs.Close()End SyncLock
End Sub
Wenn ich dich hab’,gibt es nichts, was unerträglich ist.坚持不懈!http://hi.baidu.com/1987raymond- 已标记为答案 江郎才尽 2009年10月13日 8:33