Avatar billede nicklasw Nybegynder
30. december 2005 - 14:33 Der er 8 kommentarer og
1 løsning

tjek om programmet køre

Hej.
Hvordan gør jeg så mit program tjekker om det allerede køre når det starter op. og hvis det gør skal det ikke starte op en gang til?
Avatar billede innercitydk Nybegynder
30. december 2005 - 14:45 #1
Med et singleton pattern sådan her:


//////////////////////////////////////////////////////
//                            //
// Singleton Pattern så der kun kan oprettes én    //
// instans af Form1 formen.                    //
//                            //
//////////////////////////////////////////////////////
private static Form1 instance;
       
protected Form1()
{
    InitializeComponent();
}
       
public static Form1 getInstance()
{
    if(instance==null)
        instance=new Form1();
    return instance;
}
       
/// <summary>
/// Clean up any resources being used.
/// </summary>
protected override void Dispose( bool disposing )
{
    if( disposing )
    {
        if(components != null)
        {
            components.Dispose();
        }
    }
    base.Dispose( disposing );
    instance=null;
}


De steder du så kalder formen skriver du:

Form frm=Form1.getInstance();
frm.Show();

Vh Nicki
Avatar billede nicklasw Nybegynder
30. december 2005 - 14:49 #2
kan du ikke oversætte det til vb.
Kan ikke oversætte det selv :/
Avatar billede innercitydk Nybegynder
30. december 2005 - 14:53 #3
jo øjeblik
Avatar billede innercitydk Nybegynder
30. december 2005 - 14:56 #4
Private Shared instance As Form1

Protected Sub New()
InitializeComponent
End Sub

Public Shared Function getInstance() As Form1
If instance Is Nothing Then
  instance = New Form1
End If
Return instance
End Function

Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)
If disposing Then
  If Not (components Is Nothing) Then
    components.Dispose
  End If
End If
MyBase.Dispose(disposing)
instance = Nothing
End Sub


og


Dim frm As Form = Form1.getInstance
frm.Show
Avatar billede nicklasw Nybegynder
30. december 2005 - 14:58 #5
jep. tak
Avatar billede innercitydk Nybegynder
30. december 2005 - 15:04 #6
var så lidt :)

godt nytår
Avatar billede arne_v Ekspert
30. december 2005 - 16:23 #7
øh...

Singleton gælder kun inden for samme process.

Ovenstående kode sikrer at der kun er en instans af formen i et program/process.

Man kan sagtens starte programmet 2 gange.
Avatar billede innercitydk Nybegynder
30. december 2005 - 18:18 #8
ups sry.. Det skulle have været:

C#:

private static Mutex s_Mutex;

static void Main()
{
s_Mutex = new Mutex(true, "Already Running");

if (s_Mutex.WaitOne(0,false))
{
    Application.Run(Form1);
}
else
    MessageBox.Show("Programmet kører allerede!","Info",MessageBoxButtons.OK,MessageBoxIcon.Information);
}

VB:

Private Shared s_Mutex As Mutex

Shared Sub Main()
s_Mutex = New Mutex(True, "Already Running")
If s_Mutex.WaitOne(0, False) Then
  Application.Run(Form1)
Else
  MessageBox.Show("Programmet kører allerede!", "Info", MessageBoxButtons.OK, MessageBoxIcon.Information)
End If
End Sub


Du skal bruge System.Threading; til Mutex

Vh
Avatar billede innercitydk Nybegynder
30. december 2005 - 18:19 #9
godt du lige opdagede det Arne :D

Godt nytår
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester