public override void Connect(DbItemRemoteLink linkSettings, DbItemSetting lastSetting) { DbItemSettingTelnet lastSettingTelnet = lastSetting as DbItemSettingTelnet; if (lastSettingTelnet == null) { return; } string[] values = linkSettings.Server.Split(':'); if (values.Length > 2) { throw new Exception($"服务器地址不正确。"); //地址不正确 } string server = values[0]; string port = values.Length == 2 ? $"-P {values[1]}" : "-P 23"; IntPtr parentHwnd = FormsControl.Handle; Window windows = Window.GetWindow(this); int width = (int)windows.Width - 4; int height = (int)windows.Height - 34; Thread thread = new Thread(() => { Putty.Settings settings = new Putty.Settings { fontname = lastSettingTelnet.FontName, fontsize = lastSettingTelnet.FontSize, curtype = lastSettingTelnet.Cursor - 1, linecodepage = Encoding.GetEncoding(lastSettingTelnet.Character).BodyName, backspaceisdelete = lastSettingTelnet.Fallbackkeys - 1, mouseisxterm = lastSettingTelnet.MouseAction - 1, puttycolor = new Putty.PuttyColor(lastSettingTelnet.GetPuttyColor()), rxvthomeend = lastSettingTelnet.HomeAndEnd - 1, functionkeys = lastSettingTelnet.FnAndKeypad - 1, cjkambigwide = lastSettingTelnet.CJKAmbigWide.Value, capslockcyr = lastSettingTelnet.CapsLockCyr.Value, crimplieslf = lastSettingTelnet.CRImpliesLF.Value, lfimpliescr = lastSettingTelnet.LFImpliesCR.Value, }; string user = string.Empty; string pw = string.Empty; if (!string.IsNullOrWhiteSpace(linkSettings.UserName)) { user = $"-l {linkSettings.UserName}"; pw = string.IsNullOrEmpty(linkSettings.Password) ? "" : $"-pw {linkSettings.Password}"; } if (!_putty.Create(parentHwnd, $"-telnet {port} {user} {pw} {server}", 0, 0, width, height, settings)) { string errorText = Marshal.PtrToStringAnsi(_putty.GetError()); Dispatcher.Invoke(() => { OnFatalError?.Invoke("错误", errorText); }); } _putty.Dispose(); _putty = null; GC.Collect(); GC.SuppressFinalize(this); }); thread.Start(); }