2014-06-27 40 views
0

這是用於將數據寫入到同一個文件的多線程如何從私人共享子vb.net調用公共子

Dim _readWriteLock As ReaderWriterLockSlim = New ReaderWriterLockSlim 

    Private Sub writedatatofile(ByVal s As String) 
     ' Set Status to Locked 

     _readWriteLock.EnterWriteLock() 
     Try 
      ' Append text to the file 
      Dim sw As StreamWriter = File.AppendText("textfile.txt") 
      sw.WriteLine(s) 
      sw.Close() 
     Finally 
      ' Release lock 
      _readWriteLock.ExitWriteLock() 
     End Try 
    End Sub 

這是獲取異步響應

Private Shared Sub GetResponseCallback(ByVal asynchronousResult As IAsyncResult) 
     Dim response As HttpWebResponse = CType(request.EndGetResponse(asynchronousResult), _ 
     HttpWebResponse) 

writedatatofile(Response.Headers.Tostring) 

End Sub 

whene我從GetresponseCallback調用writedatatofile我收到此錯誤:無法從共享方法或共享成員初始值設定項中引用類的實例成員,但沒有該類的顯式實例

如何將異步響應中的安全多線程寫入相同的文本文件?

回答

2

您不能從Shared(靜態)方法調用實例方法。你基本上是在說:「我想調用一個方法,該方法從一個不關心對象實例的方法中對某個對象的特定實例進行操作」 - 那麼Shared方法怎麼能夠做到這一點呢?

您需要將GetResponseCallback更改爲實例(已刪除Shared修飾符)。

+0

而writedatatofile不是公開的BTW,正如問題標題中提到的。 – Abhitalks

+0

@abhitalks看起來這兩種方法都屬於同一個類,所以它不是公共的並不重要。如果公共方法的類型相同,則可以調用Private方法。 – vcsjones

+0

是的,我試過了,但它也是begingetrequeststream,所以我應該刪除共享修飾符!謝謝 – K3rnel31