用这么多Timer 恭喜你 你的程序挂定了
没办法啊 , 老板让这么做 !
现在TataTable表中有个ReturnUrl字段,存放对方接受的Url,现在要间隔2的N-1次方秒向对方的Url发送数据 ...直到收到对方成功标志才停止 ...
我现在用循环 , 如果没有收到对方的成功标志 , 就没法向下一条数据发送了 , 还一直卡在第一条那 ...
所有才在这里提问 ,麻烦大侠给个思路 , 小弟感激不尽啊 ...
@Heiseyoumo: 用多线程啊 每条数据一个线程
这样不会影响下一条数据了
问题是有多少数据啊?
@tomcat1988: 数据不固定,因为数据表一直在变化,但不会很多 !
@Heiseyoumo: 显示的时候不需要去发数据吧。。。
可以后台写个发数据的东西啊、
遍历DataTable的行,创建Timer就好了啊
1 for (int i = 0; i < dt.Rows.Count; i++) 2 { 3 TimerCls cls = new TimerCls(); 4 var postCommercialDate = new 5 { 6 postUrl = dt.Rows[i]["returnurl"].ToString(), //商户的RETURNURL 7 commercialPid = dt.Rows[i]["pid"].ToString(), //商户的PID 8 orderNum = dt.Rows[i]["merorderNum"].ToString() 9 }; 10 if (Push(postCommercialDate.postUrl, postCommercialDate.commercialPid, dt.Rows[i], postCommercialDate.orderNum)) 11 { 12 //推送成功 13 } 14 else 15 { 16 //推送失败 17 string strUpdFailurestate = "UPDATE IWEB_ORDERS SET FAILURESTATE=1 WHERE STATE=1 AND PID='" + postCommercialDate.commercialPid + "' AND MERORDERNUM='" + postCommercialDate.orderNum + "'"; 18 if (new Web_DBHelp("ZIC_PAY").ExecuteNonQuery(strUpdFailurestate) == 1) 19 { 20 Common.OutPutLogs(Common.GetFileName(), DateTime.Now.ToString(), Common.GetMethod(), Common.GetLineNum(), "订单:" + postCommercialDate.orderNum + "推送失败,FAILURESTATE=1", "PushOrderLog"); 21 } 22 } 23 }
例如现在DataTable有10行数据,用循环只能等一条数据执行完毕,才能往下继续执行...
现在我需要创建10个Timer,每一个Timer操作一条数据,就不需要等了 ... 求解 ...
谢谢...
楼上正解
foreach(DataRow dr in dtatTable.Rows)
{
Timer t=new Timer();
}
不要用多个timer 用多个线程, 每个线程可以sleep一定的间隔时间之后再发送数据。