Class Form1 { /// <summary> /// 接收GPS信息 /// </summary> /// <param name="longitude"></param> /// <param name="latitude"></param> /// <param name="altitude"></param> public void ReceiveData(string longitude, string latitude, string altitude) { ...... } private void Form1_FormClosing(object sender, FormClosingEventArgs e) { System.Environment.Exit(0); } } Class Form2 { public ConnectSet(Form1 form) { this._form = form; InitializeComponent(); } /// <summary> /// 读取GPS数据 /// </summary> public void read() { while (!stop) { try { Thread.Sleep(1000); //隔一秒读取一次数据 string message = sp.ReadLine(); message = message.Substring(0, message.Length - sp.NewLine.Length); if (message.StartsWith("$GPGGA")) { parseGPGGA(message); if (form.IsHandleCreated && form.IsDisposed == false) //防止在窗口句柄初始化之前就走到下面的代码 { form.Invoke(new MethodInvoker(form.ReceiveData), longitude, latitude, altitude); } } else if (message.StartsWith("$GPGSV")) { parseGPGSV(message); } } catch (TimeoutException) { } } sp.Close(); sp = null; MessageBox.Show("GPS已停止"); } } System.Environment.Exit(0);