當前位置: 首頁>>代碼示例>>VB.NET>>正文


VB.NET GC.SuppressFinalize方法代碼示例

本文整理匯總了VB.NET中System.GC.SuppressFinalize方法的典型用法代碼示例。如果您正苦於以下問題:VB.NET GC.SuppressFinalize方法的具體用法?VB.NET GC.SuppressFinalize怎麽用?VB.NET GC.SuppressFinalize使用的例子?那麽, 這裏精選的方法代碼示例或許可以為您提供幫助。您也可以進一步了解該方法所在System.GC的用法示例。


在下文中一共展示了GC.SuppressFinalize方法的2個代碼示例,這些例子默認根據受歡迎程度排序。您可以為喜歡或者感覺有用的代碼點讚,您的評價將有助於係統推薦出更棒的VB.NET代碼示例。

示例1: ConsoleMonitor

' 導入命名空間
Imports System.ComponentModel
Imports System.Runtime.InteropServices

Public Class ConsoleMonitor
   Private Const STD_INPUT_HANDLE As Integer = -10
   Private Const STD_OUTPUT_HANDLE As Integer = -11
   Private Const STD_ERROR_HANDLE As Integer = -12

   Private Declare Function GetStdHandle Lib "kernel32" _
                            (nStdHandle As Integer) As IntPtr

   Private Declare Function WriteConsole Lib "kernel32" _
                            Alias "WriteConsoleA" _
                            (hConsoleOutput As IntPtr, lpBuffer As String,
                            nNumberOfCharsToWrite As UInteger, 
                            ByRef lpNumberOfCharsWritten As UInteger,
                            lpReserved As IntPtr) As Boolean 

   Private Declare Function CloseHandle Lib "kernel32" _ 
                           (handle As IntPtr) As Boolean
                    
   Private disposed As Boolean = False
   Private handle As IntPtr
   Private component As Component
   
   Public Sub New()
      handle = GetStdHandle(STD_OUTPUT_HANDLE)
      If handle = IntPtr.Zero Then
         Throw New InvalidOperationException("A console handle is not available.")
      End If
      
      component = new Component()
      
      Dim output As String = "The ConsoleMonitor class constructor." + vbCrLf
      Dim written As UInteger = 0
      WriteConsole(handle, output, CUInt(output.Length), written, IntPtr.Zero)
   End Sub

   Protected Overrides Sub Finalize()
      If handle <> IntPtr.Zero Then
         Dim output As String = "The ConsoleMonitor finalizer." + vbCrLf
         Dim written As UInteger = 0
         WriteConsole(handle, output, CUInt(output.Length), written, IntPtr.Zero)
      Else     
         Console.Error.WriteLine("Object finalization.")
      End If
      ' Call Dispose with disposing = false.
      Dispose(false)
   End Sub

   Public Sub Write()
      Dim output As String = "The Write method." + vbCrLf
      Dim written As UInteger = 0
      WriteConsole(handle, output, CUInt(output.Length), written, IntPtr.Zero)
   End Sub

   Public Sub Dispose()
      Dim output As String =  "The Dispose method." + vbCrLf
      Dim written As UInteger = 0
      WriteConsole(handle, output, CUInt(output.Length), written, IntPtr.Zero)

      Dispose(True)
      GC.SuppressFinalize(Me) 
   End Sub

   Private Sub Dispose(disposing As Boolean)
      Dim output As String =  String.Format("The Dispose({0}) method.{1}", 
                                            disposing, vbCrLf)
      Dim written As UInteger = 0
      WriteConsole(handle, output, CUInt(output.Length), written, IntPtr.Zero)

      ' Execute if resources have not already been disposed.
      If Not disposed Then
         ' If the call is from Dispose, free managed resources.
         If disposing Then
            Console.Error.WriteLine("Disposing of managed resources.")
            If component IsNot Nothing Then component.Dispose()
         End If
         ' Free unmanaged resources.
         output = "Disposing of unmanaged resources."
         WriteConsole(handle, output, CUInt(output.Length), written, IntPtr.Zero)
         
         If handle <> IntPtr.Zero Then
            If Not CloseHandle(handle) Then
               Console.Error.WriteLine("Handle cannot be closed.")
            End If    
         End If   
      End If
      disposed = True
   End Sub
End Class

Module Example
   Public Sub Main()
      Console.WriteLine("ConsoleMonitor instance....")
      Dim monitor As New ConsoleMonitor
      monitor.Write()
      monitor.Dispose()
   End Sub
End Module
開發者ID:VB.NET開發者,項目名稱:System,代碼行數:101,代碼來源:GC.SuppressFinalize

輸出:

ConsoleMonitor instance....
The ConsoleMonitor class constructor.
The Write method.
The ConsoleMonitor finalizer.
The Dispose(False) method.
Disposing of unmanaged resources.

If the monitor.Dispose method is called, the example displays the following output:
ConsoleMonitor instance....
The ConsoleMonitor class constructor.
The Write method.
The Dispose method.
The Dispose(True) method.
Disposing of managed resources.
Disposing of unmanaged resources.

示例2: MainClass

' 導入命名空間
Imports System
Imports System.Drawing
Imports System.Data
Imports System.IO
Imports System.Collections
Imports System.Windows.Forms
Imports System.Drawing.Printing

Public Class MainClass
    Shared Sub Main()
        Dim file As New MyFile("c:\FinalizeDemo.txt")

        ' now, clear the reference to the object...
        file.Dispose()
        file = Nothing

        ' wait for the user to press return...
        Console.WriteLine("Press Return to collect the garbage...")
        ' force a collect...
        GC.Collect()

        ' wait for the user to quit...
        Console.WriteLine("Press Return to quit...")

    End Sub
End Class



Public Class MyFile
    Implements IDisposable
    Private stream As FileStream
    Private isDisposed As Boolean


    Public Sub New(ByVal filename As String)
        stream = New FileStream("test.txt", FileMode.OpenOrCreate)
        Console.WriteLine("Object " & GetHashCode() & " created.")
        Console.WriteLine("Using file: " & filename)

    End Sub

    Public Sub Dispose() Implements System.IDisposable.Dispose
        If isDisposed = True Then Return
        
        stream.Close()
        stream = Nothing

        isDisposed = True

        GC.SuppressFinalize(Me)

        Console.WriteLine("Object " & GetHashCode() & " disposed.")
    End Sub

    Protected Overrides Sub Finalize()
        Dispose()
        Console.WriteLine("Object " & GetHashCode() & " finalized.")
    End Sub
End Class
開發者ID:VB程序員,項目名稱:System,代碼行數:61,代碼來源:GC.SuppressFinalize


注:本文中的System.GC.SuppressFinalize方法示例由純淨天空整理自Github/MSDocs等開源代碼及文檔管理平台,相關代碼片段篩選自各路編程大神貢獻的開源項目,源碼版權歸原作者所有,傳播和使用請參考對應項目的License;未經允許,請勿轉載。