コード例 #1
0
        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();
        }
コード例 #2
0
        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;
        }