BackgroundWorker connectWork = new BackgroundWorker(); public FormClient() { connectWork.DoWork += new DoWorkEventHandler(connectWork_DoWork); connectWork.RunWorkerCompleted += new RunWorkerCompletedEventHandler(connectWork_RunWorkerCompleted); } /// <summary> /// 异步方式与服务器进行连接 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> void connectWork_DoWork(object sender, DoWorkEventArgs e) { client = new TcpClient(); IAsyncResult result = client.BeginConnect(serverIP, 8889, null, null); while (!result.IsCompleted) { Thread.Sleep(100); AddStatus("."); } try { client.EndConnect(result); e.Result = "success"; } catch (Exception ex) { e.Result = ex.Message; return; } } /// <summary> /// 异步方式与服务器完成连接操作后的处理 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> void connectWork_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) { if (e.Result.ToString() == "success") { AddStatus("连接成功"); //获取网络流 NetworkStream networkStream = client.GetStream(); //将网络流作为二进制读写对象 br = new BinaryReader(networkStream); bw = new BinaryWriter(networkStream); AsyncSendMessage("Login," + txt_UserName.Text); Thread threadReceive = new Thread(new ThreadStart(ReceiveData)); threadReceive.IsBackground = true; threadReceive.Start(); } else { AddStatus("连接失败:" + e.Result); btn_Login.Enabled = true; } } private void btn_Login_Click(object sender, EventArgs e) { connectWork.RunWorkerAsync(); }