2012-05-18 48 views
2

我需要我的程序幫助。所以我有com端口連接(gps設備),當程序啓動時,我希望能夠顯示Form2,直到gps eventhandler被觸發。 同樣的事情,當設備開始向我發送數據時,有一段時間設備無法提供給我數據。我在那段時間怎麼知道我需要再次顯示Form2?如何在等待事件觸發時顯示一個窗體屏幕

這有點複雜的解釋。

這是我迄今爲止所做的。所以當Form1加載時,我正在顯示一個Form2屏幕,它基本上表示我正在等待顯示的信號。 現在我怎麼能把這個放在某種循環或類似的東西中,這將會一直在檢查eventhandler是否被觸發,同時我正在顯示這個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 
} 
+1

那麼爲什麼不直接在事件處理程序觸發時關閉窗體呢?那是他們的全部目的。他們在觸發事件時運行代碼。有一個等待狀態改變的無限循環是一個壞主意。 – Doomsknight

+0

@Doomsknight以及如何在不觸發時再次顯示它。例如汽車進入隧道信號丟失,但我需要激活form2,這將說沒有信號 –

+0

@Doomsknight也許我可以以某種方式檢查事件是否觸發了幾秒鐘? –

回答

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) 
} 
+0

好的,當信號顯示時這很好。但是什麼時候消失? –

+0

您是否可以不在表單1上添加指定信號丟失的文本組件?我認爲有一些代碼試圖每隔5秒左右獲取GPS座標?如果它丟失了,只需在屏幕上添加一條消息,並且如果它獲得,就隱藏該消息。 – Doomsknight

+0

我只需要特定的表單來顯示。我的意思是你認爲正確。但這是它需要做的。是的,這是爲了每5秒獲得信號。但問題的發生是因爲如果信號沒有得到如何檢查該狀態?是否有可能檢查事件狀態? –

相關問題