按钮点击进行数据查询,数据响应却或多或少会有延迟,这方面原因可能是代码优化做的不好,可能是网络延迟等等。如果将查询函数写在主线程上,那么一旦延迟,页面将会假死,给人不好的感觉,如果将查询函数放在单独的线程中,或许可以解决页面假死的问题,但是暴露新的问题是,查询按钮将会一直为可点状态(这里我们不考虑按钮状态置为不可用)
如果按钮一直可以点击,线程中的请求就不会间断,那么服务器资源压力也会增大,如何减轻这方面问题呢?
第一种方法,也是最常用的一种方法,做一个bool类型的字段去判断,如果第一次点击按钮bool字段设置为true,线程中进行数据查询,响应数据后再将字段改为false。如果第一次按钮请求还未结束,再去点击按钮,判断一下,如果字段值为true,就不去执行请求操作。
bool flag = false;
void QueryClick(object sender,EventArgs e)
{
if(!flag ){
Thread queryThread = new Thread(new ThreadStart(Query));
queryThread .Start();
}
}
void Query()
{
//查询数据
flag = false;
}
第二种方法,在点击按钮的时候记录当前时间,然后去监听它,如果两次点击按钮间隔500毫米内,就不去请求数据,反之则请求。
DateTime? queryTime = null;
Thread queryThread = null;
ManualResetEvent wait = new ManualResetEvent(false);
void QueryClick(object sender,EventArgs e)
{
queryTime = DateTime.Now;
wait.Set();
if(queryThread ==null)
{
queryThread = new Thread(new ThreadStart(Query));
queryThread .Start();
}
}
void Query()
{
While(true){
wait.Reset();
Thread.Sleep(500);
DateTime tmpTime = DateTime.Now;
TimeSpan ts = (TimeSpan)(tmpTime -queryTime );
if(ts.TotalMilliseconds>500) //查询数据
wait.WaitOne();
}
}
连续点击按钮请求数据时如何进行资源优化,布布扣,bubuko.com
原文:http://www.cnblogs.com/aimiaomiao/p/3669145.html