Click here to Skip to main content
13,301,195 members (64,879 online)
Click here to Skip to main content
Add your own
alternative version


15 bookmarked
Posted 9 Feb 2005

Singleton Design Pattern with the Compact Framework

, 9 Feb 2005
Rate this:
Please Sign up or sign in to vote.
Create single instances of forms using the Compact Framework.


There may be times when you want to be sure that there is only one instance of a form within your Compact Framework application. You may also need to be able to pass data between open forms. This is why we use the singleton design pattern. You may have used this in a standard Windows application, but a Compact Framework application is a bit trickier.

Preparing the Form

The first thing that you will need to do is add an explicit implementation of the IDisposable interface. This is something that you do not have to do with a Windows form, however it will be necessary with a Compact Windows Form.

Public Class MyForm
Inherits System.Windows.Forms.Form
Implements IDisposable

Next, you will want to change the constructor of the form to Private. This makes sure that you cannot mistakenly create a new instance of the form from anywhere else:

Private Sub New()
'This call is required by the Windows Form Designer. 
'Add any initialization after the InitializeComponent() call 
End Sub

Go ahead and remove the Protected Overloads Overrides Dispose method while you're there.

Next, you'll need to add two internal members:

Private handle As IntPtr
Private Shadows disposed As Boolean = False

*You have to declare the disposed member as Shadows because it would conflict with a member of the base class component.


Add the necessary finalization methods:

#Region " Finalization "
 ublic Overloads Sub Dispose() Implements 
' Take yourself off of the finalization queue
' to prevent finalization code for this object
' from executing a second time.
End Sub
Protected Overridable Overloads Sub Dispose(ByVal disposing As Boolean)
' Check to see if Dispose has already been called.
If Not (Me.Disposed) Then
' If disposing equals true, dispose all managed
' and unmanaged resources.
If (disposing) Then
' Dispose managed resources.
End If
' Release unmanaged resources. If disposing is false,
' only the following code is executed.
handle = IntPtr.Zero
' Note that this is not thread safe.
' Another thread could start disposing the object
' after the managed resources are disposed,
' but before the disposed flag is set to true.
' If thread safety is necessary, it must be
' implemented by the client.
End If
Me.Disposed = True
End Sub
' This Finalize method will run only if the
' Dispose method does not get called.
' By default, methods are NotOverridable.
' This prevents a derived class from overriding this method.
Protected Overrides Sub Finalize()
' Do not re-create Dispose clean-up code here.
' Calling Dispose(false) is optimal in terms of
' readability and maintainability.
End Sub
'You'll need to handle the Closed event to ensure that the
'form is disposed when closed.
Private Sub MyForm_Closed(ByVal sender As Object, _
  ByVal e As System.EventArgs) Handles MyBase.Closed
End Sub
#End Region

Shared Instance

Now, the last part. You'll need to add an Instance method to act as your shared entry point for the form. This should go directly after the constructor.

End Sub
Private Shared _Instance As MyForm = Nothing

Public Shared Function Instance() As MyForm
 If _Instance Is Nothing OrElse _Instance.disposed = True Then
   _Instance = New MyForm
 End If
 Return _Instance
End Function


This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


About the Author

Web Developer
United States United States
No Biography provided

You may also be interested in...

Comments and Discussions

Generalc# Conversion.. Pin
ingawale_raje27-Nov-08 3:28
memberingawale_raje27-Nov-08 3:28 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.

Permalink | Advertise | Privacy | Terms of Use | Mobile
Web03 | 2.8.171207.1 | Last Updated 9 Feb 2005
Article Copyright 2005 by JSaunders
Everything else Copyright © CodeProject, 1999-2017
Layout: fixed | fluid