public void CombinedAPICheck() { AirAPICheck.CancelAsync(); TrayForm.trayico_selector(); // PrevChk = -1일 경우: 수동으로 리프레시 버튼 누름, 수동으로 재탐색 if (PrevChk == "-1") { AirAPICheck.RunWorkerAsync(); } // 정시에 과다하게 몰리지 않게 3분 - 4분으로 랜덤 간격 잡기 Random r = new Random(); APICheck.Interval() = r.Next(180000, 240000); APICheck.Start(); }
private void AirAPICheck_RunWorkerCompleted(object sender, System.ComponentModel.RunWorkerCompletedEventArgs e) { // 여기는 결과값 판별 영역 if (APIOK) { string[] AirChkHour = NowChk.Split(" "); AirChkHour = AirChkHour[1].Split(":"); // MsgBox(AirChkHour(0)) '업데이트의 시간대를 가져옴 if (AirChkHour[0] == "24") { AirChkHour[0] = "00"; } // 에어체크의 API가 00(오전12)시를 24시로 표시해서 이렇게 바꿔주어야함 // 값이 바뀌든 말든 일단 API 불러온겸 그리도록 하기 AirCheck(); // 현재 공기를 체크한 PC시간과(24시) 실제 측정소의 측정기준시간(24시)이 같을 경우 if (AirChkHour[0] == DateTime.Now.ToString("HH")) { PrevChk = NowChk; // 체크 완료하였으므로 멈춤 ->다시 정각때까지 대기 Checking = false; APICheck.Stop(); } else if (My.Settings.ChkEnabled == false) { PrevChk = NowChk; // 체크 완료하였으므로 멈춤 ->새로고침 명령이 없다면 절대 업뎃 X Checking = false; APICheck.Stop(); } else if (combnum == -4) { PrevChk = NowChk; // API 호출 과부하를 막기 위해 업데이트 중지 Checking = false; APICheck.Stop(); } } else // 오류발생 (그런데 erlevel을 앞서 다 combnum에 줘서 특별한 조치 필요없음) // 타이머를 멈추지 않음으로써 오류가 일어나면 미리 설정된 인터벌마다 다시 시도하도록 하기 // API서버 트래픽 초과 if (!airData == null) { if (airData.Contains("resultCode")) { if (getData(airData, "resultCode") == "22") { combnum = -5; APICheck.Stop(); } } } // 메인GUI의 폼을 그리고 트레이도 새로고침 MainGUI.DrawState(); TrayForm.trayico_selector(); if (My.Settings.widget_enabled) { WidgetGUI.DrawState(); } // 여기서부터는 푸시 알림 영역 PushCheck(); // 이전의 상태 넘버를 저장해야함 prevCombnum = combnum; }