Imports System
Imports System.ComponentModel
Imports System.Drawing
Imports System.windows.forms

Public Class Spooler
  Private Shared Spool_counter As Integer
  Private Shared glbSpooler As Spooler
  Private legalInstance As Boolean
  '-----
  Private Sub New()
    MyBase.New()

    If Spool_counter = 0 Then     'Utwórz pierwszą i jedyną instancję
      glbSpooler = Me             'Przechowaj ją
      Spool_counter = Spool_counter + 1   'Zwiększ licznik
      legalInstance = True
    Else
      legalInstance = False
      Throw New SpoolerException()
    End If
  End Sub
  '-----
  Public Shared Function getSpooler() As Spooler
    Try
      Return New Spooler()
    Catch e As Exception
      Throw e                     'Zgłoś wyjątek w wywołującym programie
    Finally
      getSpooler = glbSpooler     'Lub zwróć jedyną instancję    
    End Try

  End Function
  '-----
  Public Sub Print(ByVal str As String)
    If legalInstance Then
      MessageBox.Show(str, "Printing...")
    Else
      Throw New SpoolerException()
    End If
  End Sub
  '-----
End Class