我的程序需要帮助。所以我有com端口连接(gps设备),当程序启动时,我希望能够显示Form2,直到gps eventhandler被触发。 同样的事情,当设备开始向我发送数据时,有一段时间设备无法为我提供数据。那个时候我怎么知道我需要再次展示Form2?
解释起来有点复杂。
这是我到目前为止所做的。因此,当Form1加载时,我正在显示一个Form2屏幕,它基本上表示我正在等待信号出现。 现在我怎么能把它放在某种循环或类似的东西中,它总是检查触发事件处理程序,同时我正在显示这个form2。
如果您需要更多解释,请告诉我。
所以这是代码:
private void Form1_Load(object sender, EventArgs e)
{
//open the com port when loading form
comport.Open();
Form2 my_form2 = new Form2();
my_form2.ShowDialog();
}
这是GPS信号的事件处理程序:
GPS.PositionReceived += new NmeaInterpreter.PositionReceivedEventHandler(GPS_PositionReceived);
这是GPS功能:
private void GPS_PositionReceived(string Lat, string Lon)
{
arrLon = Lon.Split(new char[] { '°', '"' }, StringSplitOptions.RemoveEmptyEntries);
dblLon = double.Parse(arrLon[0]) + double.Parse(arrLon[1], new System.Globalization.NumberFormatInfo()) / 60;
deciLon = arrLon[2] == "E" ? dblLon : -dblLon;
//some more code
}
答案 0 :(得分:1)
那么为什么不在事件处理程序触发时关闭表单呢?这是他们的全部目的。
他们在触发某些事情时运行代码。
有一个等待状态改变的不定循环是一个坏主意。
private void GPS_PositionReceived(string Lat, string Lon)
{
arrLon = Lon.Split(new char[] { '°', '"' }, StringSplitOptions.RemoveEmptyEntries);
dblLon = double.Parse(arrLon[0]) + double.Parse(arrLon[1], new System.Globalization.NumberFormatInfo()) / 60;
deciLon = arrLon[2] == "E" ? dblLon : -dblLon;
//some more code
// LOAD FORM 1
// CLOSE THIS FORM (FORM 2)
}