我打算使用共享變量來實現日誌記錄工具。看看下面的代碼:錯誤處理程序的ASP.NET共享變量
Imports System.IO
Public Class TestClass
Public Shared objError As New StreamWriter("C:\Test.txt")
End Class
Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Try
TestClass.objError.WriteLine("Error 1")
TestClass.objError.WriteLine("Error 2")
TestClass.objError.WriteLine("Error 3")
'TestClass.objError.Close()
TestClass.objError.WriteLine("Error 4")
TestClass.objError = Nothing
Catch ex As Exception
End Try
End Sub
我不知道如何創建這個共享變量和銷燬(我假設它是在Form_Load之前創建並由form_unload破壞)。我也不明白爲什麼可以將對靜態變量的引用設置爲Nothing;這個變量應該存在,直到程序結束? (Q1,第1部分)我意識到這是一個簡單的問題。
有更好的方法來實現日誌記錄機制嗎? (Q1第2部分)。日誌記錄機制寫入錯誤和日誌條目。
UPDATE 我想我在這裏找到了我的答案:http://msdn.microsoft.com/en-us/library/z2cty7t8.aspx。 「一個靜態變量繼續存在並保留其最新值,下一次您的代碼調用該過程時,該變量不會重新初始化,並且它仍保留您分配給它的最新值。在其中定義的類或模塊的生命週期。「
我不相信這是創建日誌工具的最佳方式。因此,我的問題的第2部分仍然是開放的。
謝謝。現在很清楚+1。在我回答之前還有一個問題;第一次調用StreamWriter.WriteLine之後;文件被鎖定(如果沒有使用共享變量)。有沒有辦法在不關閉StreamWriter的情況下釋放文件鎖? – w0051977
你可以[在這裏看看MSDN](http://msdn.microsoft.com/en-us/library/5h0z48dh.aspx)FileStream上允許控制鎖定的文檔。但是,請記住,如果寫入後未關閉流,則如果程序崩潰,則可能會丟失信息。 (告別記錄數據)。 – Steve
是的,似乎關鍵是將FileStream傳遞給StreamWriter。 FileStream可以共享。 – w0051977