2012-05-17 3 views
0

이벤트 처리기가있는 함수가 있습니다. 그것은 GPS 위치를 읽고 매번 위치를 읽었습니다. 데이터베이스에 데이터를 넣었습니다. 문제는 3 초 동안 3 개의 입력이 있다는 것입니다.코드의 일부를 5 초마다 처리하는 방법

예를 들어 5 초마다 진행되는 코드의 일부를 만들려면 어떻게해야합니까?

timer_tick을 시도했지만이 방법은 이벤트 처리기의 기능이므로 수행 방법을 모르겠습니다. 나는 코드의이 부분은 매 5 초마다 사용할 수 할

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; 
    arrLat = Lat.Split(new char[] { '°', '"' }, StringSplitOptions.RemoveEmptyEntries); 
    dblLat = double.Parse(arrLat[0]) + double.Parse(arrLat[1], new System.Globalization.NumberFormatInfo())/60; 
    deciLat = arrLat[2] == "N" ? dblLat : -dblLat; 

       ... //code 
} 

:

여기 내 기능입니다.

아, 네,이 이벤트 핸들러 : 타이머를 이용하여 간단하게

GPS.PositionReceived += new NmeaInterpreter.PositionReceivedEventHandler(GPS_PositionReceived); 
+0

나는 코드의 흐름을 잘 이해하지 못한다. GPS_PositionReceived 이벤트는? 마다? 5 초마다 그 코드의 어떤 부분을 실행해야합니까? – Steve

+0

나는 OP가 이벤트 처리기를 5 초당 최대 한 번만 호출하도록 제한하는 방법을 묻고 있다고 생각합니다. – KingCronus

답변

2

내가 무엇을 말하려고하는 것은 당신의 방법은 두 번째 3 번 호출되고 있다는 생각 실제로 5 초마다 호출되기를 원합니다. 옳은.

그렇게되면,

DateTime lastDBUpdate 

변수를 저장하고, 매번 당신은 데이터베이스에 기록이 타임 스탬프를 업데이트합니다.

그런 다음 당신은 당신의 방법의 첫 번째 라인으로

if(DateTime.Now.Subtract(lastDBUpdate).TotalSeconds < 5) { return; } 

처럼 수표를 사용할 수 있습니다.

// Timestamp of last update time 
// Default to very old timestamp on init so it always runs once straight away 
private DateTime lastDBUpdate = DateTime.MinValue; 

private void GPS_PositionReceived(string Lat, string Lon) 
{ 
    // Throttle this method 
    if(DateTime.Now.Subtract(lastDBUpdate).TotalSeconds < 5) return; 

    // your existing code 

    // Update the timestamp 
    lastDBUpdate = DateTime.Now; 
} 
+0

어떻게 업데이트해야하며 어디에 넣어야합니까? –

+0

예를 들어 편집하십시오. – KingCronus

+0

감사합니다. –

1
+0

나는 이것이 OP가 요구하는 것이라고 확신하지 않는다. @Dave Bish 또는 나의 답을 보라. – KingCronus

1

항상 GPS 위치가 유지 된 마지막 시간을 나타내는 정적/클래스 수준의 변수가있을 수 있습니다.

Public DateTime LastGPSInsert {get; set;} 

... 

if((DateTime.Now - LastGPSInsert).TotalSeconds > 5) 
{ 
    //Do Insert 
    LastGPSInsert = DateTime.Now; 
} 
//Skip insert 
+0

좋은 답변이지만, 왜 이것을 공공 재산으로 만들고 싶습니까? 비공개 필드가 좀 더 안전하고 * 빠릅니다. – KingCronus

관련 문제