如何解决在WinformC#中持续使用API
我编写了一个简单的程序,该程序必须基于API连续检查数据。 到目前为止,我要做的是制作一个计时器,然后在计时器事件上执行GET过程
private void TimerStatus_Tick(object sender,EventArgs e)
{
//stop timer
TimerStatus.Stop();
//get data
getCommand();
//restart timer
TimerStatus.Start();
}
void getCommand()
{
string url = "https://somewhere/getcommand?token=somekey¶m=";
string param = "0";
WebRequest request = WebRequest.Create(url + param ); ;
request.Method = "GET";
request.ContentType = "application/x-www-form-urlencoded";
request.Credentials = CredentialCache.DefaultCredentials;
try
{
WebResponse response = request.GetResponse();
bool connected = false;
if ((((HttpWebResponse)response).StatusDescription) == "OK")
connected = true;
//continue if connected
if (connected)
{
using (Stream dataStream = response.GetResponseStream())
{
// Open the stream using a StreamReader for easy access.
StreamReader reader = new StreamReader(dataStream);
// Read the content.
string responseFromServer = reader.ReadToEnd();
//check output
Console.WriteLine("Respond from server : " + responseFromServer);
try
{
//parse data,store value
parseThenProcess(responseFromServer);
}
catch
{
//parsing data error
Console.WriteLine("exception error response");
}
}
}
// Close the response.
response.Close();
}
catch
{
Console.WriteLine("Get command failed");
}
}
此代码对我来说很好。但是,当我尝试在计时器事件中添加更多具有不同API的命令时,winforms感觉有点落后。只是我这边的错误与API处理无关,还是我需要对如何处理API进行一些改进?
private void TimerStatus_Tick(object sender,EventArgs e)
{
//stop timer
TimerStatus.Stop();
//get data
getCommand_A();
getCommand_B();
getParameter_C();
getParameter_D();
//restart timer
TimerStatus.Start();
}
解决方法
不使用Windows计时器吗?而且我不是在开玩笑。您有多种方法:
- 了解如何使用异步和异步Web界面,以免阻塞UI线程的时间不要太长。
或
- 使用单独的线程或任务(不需要计时器,您可以有一个任务,然后安排另一个任务,即)。
您所做的就是在UI线程上运行所有这些,实际上并不需要。特别是因为您确实是同步发送的,所以UI会在执行请求时阻塞。这是UI通过了解异步方法多年解决的问题。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。