求救:定时发送问题?
我在做一个短信平台,定时发送现在出现大问题了,老是发送两条或更多,不知道为什么,代码如下:
public void Timesend()
{
int sendtype=1;
string time =DateTime.Now.ToLongTimeString();
string year=DateTime.Today.Year.ToString();
string month=DateTime.Today.Month.ToString();
string day=DateTime.Today.Day.ToString();
string datetime=year+"-"+month+"-"+day+" "+time;
DataSet ds =MyBMS.Access.Users.Outmsg(datetime);
int count=ds.Tables.Count;
if(count==0)
{
//时间点没有需要发送的信息
}
else
{
string status="";
for(int i=0;i<count;i++)//循环发送信息
{
string outid=ds.Tables[0].Rows[i][0].ToString();
string msgcontent=Server.UrlEncode(ds.Tables[0].Rows[i][3].ToString());//循环获取140个字符,70个汉字
string Msgcontent=ds.Tables[0].Rows[i][3].ToString();//取信息内容
string mobile=ds.Tables[0].Rows[i][2].ToString();//取手机号码
string CmpyAccount =ds.Tables[0].Rows[i][1].ToString();//获取数据库里UserID
string SubloginName=ds.Tables[0].Rows[i][6].ToString();//帐号登陆名
string SpNumber=MyBMS.Access.Users.SelectSpNumber(CmpyAccount);//获取特服号
string link=MyBMS.Access.Users.Sendlink(SpNumber,mobile,msgcontent);//连接接口
ds.Tables[0].Rows[i].Delete();
RegisterStartupScript("key","<script language=jscript>window.open(link)</script>");//调用接口
status = MyBMS.Access.Users.Get_Http(link,10000);//读取返回状态
int flag;
try
{
flag= Convert.ToInt32(status.Substring(0,1));//截取返回值的第一字符 0表示成功 1表示失败
}
catch
{
flag=1;
}
if(flag==0)//发送成功
{
MyBMS.Access.Users Msg=new Users();//对象事例花
Msg.InsertSendMsg(CmpyAccount,SpNumber,mobile,Msgcontent,sendtype,flag,SubloginName);//插入成功记录
Msg.deleteoutmsg(outid);//删除OutMsgBox里的这条记录
}
else
{
flag=1;//发送失败
MyBMS.Access.Users Msg=new Users();
Msg.InsertSendMsg(CmpyAccount,SpNumber,mobile,Msgcontent,sendtype,flag,SubloginName);//插入失败记录
Msg.updatemsgCountadd(CmpyAccount);//发送失败 给用户可用余额增加1
Msg.deleteoutmsg(outid);//删除OutMsgBox里的这条记录
}
}
}
}
#region Web 窗体设计器生成的代码
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
//
InitializeComponent();
base.OnInit(e);
}
/// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
/// 此方法的内容。
/// </summary>
private void InitializeComponent()
{
this.timer1 = new System.Timers.Timer();
((System.ComponentModel.ISupportInitialize)(this.timer1)).BeginInit();
//
// timer1
//
this.timer1.Enabled = true;
this.timer1.Interval = 1000;
this.timer1.Elapsed += new System.Timers.ElapsedEventHandler(this.timer1_Elapsed);
this.Load += new System.EventHandler(this.Page_Load);
((System.ComponentModel.ISupportInitialize)(this.timer1)).EndInit();
}
#endregion
private void timer1_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
this.Timesend();
}
各位前辈们,如果有相关的实例或代码能否给小弟参考一下。
问题点数:100、回复次数:12Top
1 楼lovelxj(伊斯人,吾谁与归)回复于 2005-08-04 19:12:25 得分 5
就发送一条看看会不会出现问题 如果是 那就是短信发送网关问题了Top
2 楼zhangweiguo3984(维维)回复于 2005-08-04 19:27:03 得分 0
如果是正常的立即发送是没有问题的,如果定时发送的话,就会出现我刚说的问题,应该是我的程序问题,各路高手帮忙啊Top
3 楼adandelion(水源是CSDN最黑的地方,但这个最黑是CSDN一手制造的!)回复于 2005-08-04 21:05:31 得分 0
GZTop
4 楼cat_hsfz(我的新Blog在http://cathsfz.cnblogs.com)回复于 2005-08-04 22:34:44 得分 5
是不是你的页面开了AutoEventWireUp,所以timer1_Elapsed被显式和隐式各调用了一遍?Top
5 楼zhangweiguo3984(维维)回复于 2005-08-05 08:40:03 得分 0
AutoEventWireUp 没有开啊 可是为什么总是执行两次 或是更多呢?哪位大峡有定时发送的实例啊,发个给小弟吧Top
6 楼huangguolinc(来了)回复于 2005-08-05 08:53:04 得分 5
记号Top
7 楼cat_hsfz(我的新Blog在http://cathsfz.cnblogs.com)回复于 2005-08-05 14:14:44 得分 20
你是不是应该在timer1_Elapsed()里面把timer1的Enable设置为false?Top
8 楼zhangweiguo3984(维维)回复于 2005-08-06 08:17:24 得分 0
cat_hsfz() 设置都是对的呀 有人说这个是.net的一个BUG,你们没有出现过这样的情况吗?哪位大侠做过定时发送啊,给个思路啊?Top
9 楼syeerzy(快乐永远*先天下之乐而乐*后天下之忧而忧*)回复于 2005-08-06 08:41:46 得分 5
这和Bug没关系......自己不会游泳不能怪父母没给你生对鱼鳃.....
为什么我群发的时候没出过?Top
10 楼zhangweiguo3984(维维)回复于 2005-08-06 10:26:22 得分 0
syeerzy(快乐永远*先天下之乐而乐*后天下之忧而忧) 我到不是群发有问题 就是定时发送的时候会出现这样的情况,总是一条同样的信息发送两次或是更多,你们是怎么实现的呀?如果哪位大侠有定时发送的实例,能否给我参考,我QQ:55239680 谢谢!Top
11 楼luojianfeng(原来我不傻!)回复于 2005-08-08 09:24:31 得分 0
顶Top
12 楼libinguest(上善若水)回复于 2005-09-17 14:21:39 得分 60
你在你的Timer控件在载入启动后调用你方法的里面第一行让Time.Stop()
在方法执行完后又让Time.Start(),或者你加上try.....catch.....finilly(这里启动也行.)Top




