vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Mails senden, abrufen und decodieren - ganz easy ;-)  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2025
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

C# Ecke
Singleton mit Mutex und Startparameter 
Autor: viperbone
Datum: 14.07.09 17:45

Hallo zusammen

Ich habe ein Programm mit folgendem Code, das eigentlich eine Singleton von meiner "Form1" machen sollte. Dies mache ich über einen Mutex.

Es klappt auch soweit nur wenn ich die Exe ein zweites mal starte kommt der Code nie mehr aus "UseInstanceChannel" raus.

Kann mir jemand sagen was da falsch ist? Ich bin froh um jeden Hinweis. Danke.

        static StartUpHandler myStartUpHandler;
        static Form1 mySingleForm1;
        [STAThread]
        public static void Main(string[] CmdArgs)
        {
            myStartUpHandler = new StartUpHandler();
            myStartUpHandler.CallbackEvent += new _
              StartUpHandler.CallbackEventHandler( _
              m_objStartuphandler_CallbackEvent);
            myStartUpHandler.Host = "127.0.0.1";
            myStartUpHandler.Port = 57349;
            myStartUpHandler.UniqueMutexId = "MYSUPER_UNIQUE_ID";
            myStartUpHandler.Run(CmdArgs);
        }
 
        private static void m_objStartuphandler_CallbackEvent(object sender, _
          StartUpEventArgs e)
        {
            FormSplash m_frmSplash;
            m_frmSplash = new FormSplash();
            m_frmSplash.ShowDialog(1000);
            if (e.IsFirst)
            {
                mySingleForm1 = new Form1();
                if (e.CmdArgs.Length > 0)
                {
                }
                else
                {
                    mySingleForm1.ShowDialog();
                }
                mySingleForm1 = null;
            }
            else
            {
                if (e.CmdArgs.Length > 0)
                {
                }
                if (mySingleForm1.WindowState == FormWindowState.Minimized)
                {
                    mySingleForm1.WindowState = FormWindowState.Normal;
                }
                mySingleForm1.TopMost = true;
                mySingleForm1.BringToFront();
            }
        }
 
        public class StartUpHandler : MarshalByRefObject
        {
            System.Threading.Mutex m_objMutex;
            System.Runtime.Remoting.Channels.Tcp.TcpChannel m_objChannel;
            string m_strId;
            string m_strHost;
            int m_intPort;
            public event CallbackEventHandler CallbackEvent;
            public delegate void CallbackEventHandler(object sender, _
              StartUpEventArgs e);
 
            public void Run(string[] args)
            {
                bool createdNew = true;
                m_objMutex = new System.Threading.Mutex(false, m_strId, out _
                  createdNew);
                if (m_objMutex.WaitOne(1, true))
                {
                    CreateInstanceChannel();
                    StartUpEventArgs event_args = new StartUpEventArgs(true, _
                      args);
                    DoCallback(event_args);
                }
                else
                {
                    StartUpEventArgs event_args = new StartUpEventArgs(false, _
                      args);
                    UseInstanceChannel(event_args);
                }
            }
 
            //Properties
 
            private void CreateInstanceChannel()
            {
                IDictionary m_objTcpConfig = new Hashtable(2);
                System.Runtime.Remoting.RemotingServices.Marshal(this, m_strId);
                m_objTcpConfig["bindTo"] = m_strHost;
                m_objTcpConfig["port"] = m_intPort;
                m_objChannel = new _
                  System.Runtime.Remoting.Channels.Tcp.TcpChannel( _
                  m_objTcpConfig, null, null);
                System.Runtime.Remoting.Channels.ChannelServices.RegisterChanne_
                l(m_objChannel, true);
            }
 
            private void UseInstanceChannel(StartUpEventArgs event_args)
            {
                try
                {
                    string m_strAddress = "tcp://" + m_strHost + ":" + _
                      m_intPort + "/" + m_strId;
                    StartUpHandler m_objRemoteHandler = new StartUpHandler();
                    m_objRemoteHandler = ( _
                      StartUpHandler)System.Runtime.Remoting.RemotingServices.C_
                      onnect(typeof(StartUpHandler), m_strAddress);
                    m_objRemoteHandler.DoCallback(event_args);
 
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                }
            }
 
            public void DoCallback(StartUpEventArgs event_args)
            {
                MessageBox.Show("doo callback");
                CallbackEvent(this, event_args);
            }
        }

fg viperbone

alle Nachrichten anzeigenGesamtübersicht  |  Zum Thema  |  Suchen

 ThemaViews  AutorDatum
Singleton mit Mutex und Startparameter4.299viperbone14.07.09 17:45
Re: Singleton mit Mutex und Startparameter2.251ModeratorDaveS14.07.09 19:14
Re: Singleton mit Mutex und Startparameter2.144viperbone14.07.09 21:18
Re: Singleton mit Mutex und Startparameter2.157ModeratorDaveS15.07.09 08:45
Re: Singleton mit Mutex und Startparameter2.093viperbone15.07.09 13:13
Re: Singleton mit Mutex und Startparameter2.014ModeratorDaveS15.07.09 14:45
Re: Singleton mit Mutex und Startparameter2.147viperbone15.07.09 17:21
Re: Singleton mit Mutex und Startparameter2.030ModeratorDaveS15.07.09 18:57
Re: Singleton mit Mutex und Startparameter2.223Christoph197215.07.09 17:40
Re: Singleton mit Mutex und Startparameter2.046ModeratorDaveS15.07.09 18:50
Re: Singleton mit Mutex und Startparameter2.000Christoph197215.07.09 20:37
Re: Singleton mit Mutex und Startparameter2.055ModeratorDaveS15.07.09 21:09
Re: Singleton mit Mutex und Startparameter2.030Christoph197215.07.09 21:21
Re: Singleton mit Mutex und Startparameter1.978ModeratorDaveS15.07.09 21:40
Re: Singleton mit Mutex und Startparameter1.988viperbone15.07.09 20:39
Re: Singleton mit Mutex und Startparameter2.021Christoph197215.07.09 20:55
Re: Singleton mit Mutex und Startparameter2.057ModeratorDaveS15.07.09 21:41
Re: Singleton mit Mutex und Startparameter2.004Christoph197215.07.09 21:51
Re: Singleton mit Mutex und Startparameter2.006ModeratorDaveS15.07.09 22:03
Re: Singleton mit Mutex und Startparameter1.976viperbone16.07.09 09:33
Re: Singleton mit Mutex und Startparameter2.160ModeratorFZelle16.07.09 09:52
Re: Singleton mit Mutex und Startparameter1.972ModeratorDaveS16.07.09 10:21
Re: Singleton mit Mutex und Startparameter2.020ModeratorDaveS16.07.09 10:18
Re: Singleton mit Mutex und Startparameter1.993viperbone16.07.09 11:32
Re: Singleton mit Mutex und Startparameter2.343ModeratorDaveS16.07.09 14:24
Re: Singleton mit Mutex und Startparameter1.994Christoph197216.07.09 17:00
Re: Singleton mit Mutex und Startparameter2.054ModeratorDaveS17.07.09 11:34

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2025 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel