private void NetworkHandler_NetworkInitializingFinished(InitializeNetworkHandler handler)
        {
            try
            {
                handler.NetworkInitializingFinished -= NetworkHandler_NetworkInitializingFinished;

                ConnectionLobby.Status = handler.Message;

                if (!handler.Error)
                {
                    Network = handler.Network;

                    SessionInformation = new SessionConnectParameters(handler.ConnectParameters.ServerIP, ParentControl.NetworkDeathHandler, Network.ClientSession);
                    ShowReconnectOptions();

                    if (handler.ConnectParameters.GameReconnect)
                    {
                        ParentControl.StatusControl.SetReconnecting();
                        ParentControl.SwitchMode(GameMode.Status);
                    }
                    else
                    {
                        ParentControl.OptionControl.SetServerIP(handler.ConnectParameters.ServerIP.ToString());
                        ParentControl.SwitchMode(GameMode.Options);
                    }
                }
            }
            finally
            {
                Connecting = false;
            }
        }
        protected void InitializeNetwork(bool reconnect = false)
        {
            InitializeNetworkHandler networkHandler;

            lock (ConnectionLobby)
            {
                if (Connecting)
                {
                    return;
                }

                ConnectionLobby.Status = "Connecting...";

                if (Network != null)
                {
                    return;
                }

                IPAddress serverIP;
                if (!IPAddress.TryParse(ConnectionLobby.ServerIP, out serverIP))
                {
                    ConnectionLobby.Status = "Invalid IP!";
                    return;
                }

                SessionConnectParameters connectParams;

                if (reconnect)
                {
                    connectParams = SessionInformation;
                }
                else
                {
                    connectParams = new SessionConnectParameters(serverIP, ParentControl.NetworkDeathHandler);
                }

                networkHandler = new InitializeNetworkHandler(connectParams, ParentControl.Logger);
                networkHandler.NetworkInitializingFinished += NetworkHandler_NetworkInitializingFinished;

                Connecting = true;
            }

            new Thread(networkHandler.InitializeNetwork).Start();
        }