[英]Making a Timer reset every 1 second
我試圖每1秒重置一次計時器,以便它從Web腳本中檢索響應。 但是我嘗試過的所有重置計時器的方法,例如啟動和停止功能,以及配置計時器和創建新計時器。 它只是找到第一個響應,然后不再查詢
它應該工作的方式是:
當按下按鈕上的書>開始計時器>計時器命中0>查詢Web鏈接>在標簽4中放置響應(直到這里完成)>時間重置>查詢Web鏈接>在標簽4中放置響應,它將繼續執行此操作直到按下“關閉書本”按鈕
碼:
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();
}
代碼中存在一個基本問題:計時器會自動運行其tick事件,直到您告訴它停止為止。 您是在告訴它在第一個刻度之后停止並錯誤地創建了一個新刻度。 您可以將其完全刪除:
timer1.Dispose();
timer1 = new System.Windows.Forms.Timer();
另外,由於您正在使用using statements
,所以這也沒有意義:
request.GetResponse().Dispose();
並且,基本上不推薦使用HttpWebRequest
和HttpWebResponse
,而是使用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
語句以刪除所有if
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.