要执行的任务是通过webservice来获取当前的数据
但是有时候webservice返回数据的时间会超过1秒,有时甚至是几十秒
这个时候如果1秒内没有执行完, System.Threading.Timer 就会再开一个新的线程
我在输出信息的时候发现,获取到的数据经常会连着好几条是同一个时间点的
并且有时候突然返回一条好几秒前的数据
我是想 能不能让System.Threading.Timer 等获取完这一次数据后 再进行下一次获取
6 个解决方案
#1
我做过类似的东西,也是用WebBrowser抓数据。
我的做法是,在打开WebBrowser之后就加一个bool锁,如果这个bool为true就表示WebBrowser已经在执行,Timer在当前时间节点就不生成新的WebBrowser,否则生成。
不知能否满足你的要求。
我的做法是,在打开WebBrowser之后就加一个bool锁,如果这个bool为true就表示WebBrowser已经在执行,Timer在当前时间节点就不生成新的WebBrowser,否则生成。
不知能否满足你的要求。
#2
这个也是我目前能想到的唯一的方法
我对线程不大了解,没敢乱用,所以来求助的
#3
加个标记不就好了吗
#4
我建议楼主处理后面的结果就行了.本来远程调用你如果非要等返回了结果再来执行下一次,那么这个你可以不用timer来处理,就直接同步主法就可以搞定.
建议远程这种还是异步好.
建议远程这种还是异步好.
#5
定时器重入问题
try
{
timer.Stop();
invokeWebService();
}
finnally
{
timer.Start();
}
try
{
timer.Stop();
invokeWebService();
}
finnally
{
timer.Start();
}
#6
System.Timers.Timer tm = new System.Timers.Timer(intelval);
tm.Elapsed += (sender, e) =>{
System.Timers.Timer t = sender as System.Timers.Timer;
t.Enable = false;
///TODO:你需要的业务
t,Enable = true;
});
tm.Elapsed += (sender, e) =>{
System.Timers.Timer t = sender as System.Timers.Timer;
t.Enable = false;
///TODO:你需要的业务
t,Enable = true;
});
#1
我做过类似的东西,也是用WebBrowser抓数据。
我的做法是,在打开WebBrowser之后就加一个bool锁,如果这个bool为true就表示WebBrowser已经在执行,Timer在当前时间节点就不生成新的WebBrowser,否则生成。
不知能否满足你的要求。
我的做法是,在打开WebBrowser之后就加一个bool锁,如果这个bool为true就表示WebBrowser已经在执行,Timer在当前时间节点就不生成新的WebBrowser,否则生成。
不知能否满足你的要求。
#2
这个也是我目前能想到的唯一的方法
我对线程不大了解,没敢乱用,所以来求助的
#3
加个标记不就好了吗
#4
我建议楼主处理后面的结果就行了.本来远程调用你如果非要等返回了结果再来执行下一次,那么这个你可以不用timer来处理,就直接同步主法就可以搞定.
建议远程这种还是异步好.
建议远程这种还是异步好.
#5
定时器重入问题
try
{
timer.Stop();
invokeWebService();
}
finnally
{
timer.Start();
}
try
{
timer.Stop();
invokeWebService();
}
finnally
{
timer.Start();
}
#6
System.Timers.Timer tm = new System.Timers.Timer(intelval);
tm.Elapsed += (sender, e) =>{
System.Timers.Timer t = sender as System.Timers.Timer;
t.Enable = false;
///TODO:你需要的业务
t,Enable = true;
});
tm.Elapsed += (sender, e) =>{
System.Timers.Timer t = sender as System.Timers.Timer;
t.Enable = false;
///TODO:你需要的业务
t,Enable = true;
});