我打算使用共享变量来实现日志记录工具。看看下面的代码:错误处理程序的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