2017-11-12 3 views
0

타이머를 1 초마다 재설정하여 웹 스크립트의 응답을 검색하려고합니다. 타이머를 재설정하고 새로운 것을 만들뿐만 아니라 시작 및 중지 기능을 좋아합니다. 그냥 첫 번째 응답이 다시타이머를 1 초마다 초기화합니다.

그것이 작동해야하는 방법을 쿼리하지 않습니다 찾습니다

버튼에 책을 누를 때

이> 타이머를 시작> 타이머가 0에 도달> 쿼리 웹 링크> 라벨에 응답을 넣어

private void timer1_Tick(object sender, EventArgs e) 
    { 

     HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://fms.psrpc.co.uk/apistate.php?" + ApiKey); 
     HttpWebResponse response = (HttpWebResponse)request.GetResponse(); 

     using (response) 
     { 
      StreamReader reader = new StreamReader(response.GetResponseStream()); 
      if (reader.ReadToEnd() == "State 1") 
      { 
       label4.Text = "On Duty"; 
       label4.ForeColor = Color.Gray; 

      } 
      else 
      if (reader.ReadToEnd() == "State 2") 
      { 
       label4.Text = "Available for calls"; 
       label4.ForeColor = Color.Green; 

      } 
      else 
      if (reader.ReadToEnd() == "State 4") 
      { 
       label4.Text = "On Break"; 
       label4.ForeColor = Color.Yellow; 

      } 
      else 
      if (reader.ReadToEnd() == "State 5") 
      { 
       label4.Text = "Responding to call"; 
       label4.ForeColor = Color.Orange; 

      } 
      else 
      if (reader.ReadToEnd() == "State 6") 
      { 
       label4.Text = "On Scene"; 
       label4.ForeColor = Color.LightBlue; 

      } 
      else 
      if (reader.ReadToEnd() == "State 7") 
      { 
       label4.Text = "Traffic Stop"; 
       label4.ForeColor = Color.Purple; 

      } 
      else 
      if (reader.ReadToEnd() == "PANIC") 
      { 
       label4.Text = "PANIC BUTTON ACTIVATED"; 
       label4.ForeColor = Color.Red; 

      } 
      else 
      if (reader.ReadToEnd() == "Assigned") 
      { 
       label4.Text = "Assigned to call"; 
       label4.ForeColor = Color.Brown; 

      } 



     } 
     request.GetResponse().Dispose(); 

     timer1.Dispose(); 
     timer1 = new System.Windows.Forms.Timer(); 
    } 
+0

여기서 실제로 고쳐야 할 문제가 무엇인지 모르겠다. 변수에'ReadToEnd'의 첫 번째 결과를 저장해야합니다. 그러면 웹 사이트를 쿼리하여 얻는 속도가 제한된다는 것을 알게 될 것입니다 매초 – Sayse

답변

2

있다 : 4 시간 리셋> 쿼리 웹 링크>는

코드를 누르면 책 끄기 버튼 때까지이 일을 계속 라벨 4의 반응을 넣어> (여기까지 작동) 코드의 근본적인 문제 : 타이머가 자동으로 틱 이벤트를 실행합니다. 당신이 멈추라 고 말할 때까지 첫 번째 틱 이후에 멈추고 실수로 새로운 틱을 생성한다고 말하고 있습니다. 당신은 완전히이를 제거 할 수 있습니다

timer1.Dispose(); 
timer1 = new System.Windows.Forms.Timer(); 

을 또한,이 using statements을 사용하고 있기 때문에,이 또한 무의미 :

request.GetResponse().Dispose(); 

그리고, HttpWebRequestHttpWebResponse 기본적으로 사용되지 않습니다, 대신 HttpClient을 사용

private void timer1_Tick(object sender, EventArgs e) 
{ 
    using (var client = new HttpClient()) 
    { 
     string data = client.GetStringAsync("http://fms.psrpc.co.uk/apistate.php?" + ApiKey).GetAwaiter().GetResult(); 

     if (data == "State 1") 
     { 
      label4.Text = "On Duty"; 
      label4.ForeColor = Color.Gray; 

     } 
     else 
     if (data == "State 2") 
     { 
      label4.Text = "Available for calls"; 
      label4.ForeColor = Color.Green; 

     } 
     else 
     if (data == "State 4") 
     { 
      label4.Text = "On Break"; 
      label4.ForeColor = Color.Yellow; 

     } 
     else 
     if (data == "State 5") 
     { 
      label4.Text = "Responding to call"; 
      label4.ForeColor = Color.Orange; 

     } 
     else 
     if (data == "State 6") 
     { 
      label4.Text = "On Scene"; 
      label4.ForeColor = Color.LightBlue; 

     } 
     else 
     if (data == "State 7") 
     { 
      label4.Text = "Traffic Stop"; 
      label4.ForeColor = Color.Purple; 

     } 
     else 
     if (data == "PANIC") 
     { 
      label4.Text = "PANIC BUTTON ACTIVATED"; 
      label4.ForeColor = Color.Red; 

     } 
     else 
     if (data == "Assigned") 
     { 
      label4.Text = "Assigned to call"; 
      label4.ForeColor = Color.Brown; 

     } 
    } 
} 

switch 문을 모두 읽고을 삭제할 수도 있습니다.s.

+0

Httpclient가 웹 브라우저를 열지 않습니까? 아니면 브라우저를 닫은 채로 유지합니까? – KjayCopper

+0

HttpClient는 HttpWebRequest/Response의 래퍼입니다. 어떤 브라우저도 열지 않습니다. –

+0

httpclient를 사용하면 어떻게 될까요? – KjayCopper

관련 문제