private void DoRun() { OpenVPNClient client = null; lock (m_clientSync) { if (m_client == null) { throw new Exception("client not initialized"); } client = m_client; // Do NOT call m_client.Start under m_clientSync'lock } // Dispatcher must be instantiated before starting to allow handling stop requests from outside while the client isn't started yet RunDispatcher(); if (!client.Start()) { throw new Exception("client start failed"); } }