public void Start(RdpBridgeStartOptions options) { _running = true; StartIngressThread(); _channel.WriteDelimited(new SessionMessage { SessionStart = new SessionStartMessage { SessionId = options.SessionId, } }); FreeRdpGlue.Main(new MainOptions { Hostname = options.Host, Username = options.Username, Password = options.Password, Domain = options.Domain, EntryPoints = new EntryPoints { OnContextCreated = OnContextCreated, OnAuthenticate = OnAuthenticate, OnVerifyCertificate = FrgOnVerifyCertificateFn, UpdateCallbacks = new UpdateCallbacks { } } }); _channel.WriteDelimited(new RdpMessage { SessionEnd = new RdpSessionEndMessage { }, }); _running = false; Console.WriteLine("YYY 1"); _inputThread.Join(); Console.WriteLine("YYY 2"); _channel.Close(); Console.WriteLine("YYY 3"); if (_exitError != null) { throw _exitError; } }