首页 新闻 会员 周边

如何让程序暂停几秒再执行

0
悬赏园豆:200 [已解决问题] 解决于 2009-09-17 10:12

在网上下载的一个邮件群发系统来学习。发现是不间断发送,这样就很容易被smtp服务器认定为垃圾邮件进而暂时禁用邮箱。所以想通过延长两次发送之间的间隔来实现对smtp服务器的欺骗。搞了几天都没成功,大家帮忙看看吧。

这不分时窗体按钮触发代码

Code

 

下面是上面的程序用所用到的mailunit类里的SendMail2方法的代码:

 

Code

 

新人,只有200分可用,全部给了。

北极鹄的主页 北极鹄 | 初学一级 | 园豆:0
提问于:2009-09-15 23:58
< >
分享
最佳答案
0

编程方面:

可以用邀月提供的多线程方法,以Thread.Sleep(3000)方法控制每个线程的休息时间。如果你还不熟悉多线程编程,可以先使用BackgroundWorker组件入手实现,参看:http://www.cnblogs.com/happy555/archive/2007/11/07/952315.html

还有一种方法更为简单,就是直接在代码中插入Thread.Sleep(3000),来实现暂停效果,但是这样你会感觉你的用户界面假死了,因为Thread.Sleep(3000)会使当前线程休眠,而你在窗口界面所在的线程中执行,界面也就没有响应了。

第三种方法与上一种方法差不多,但是不会使界面失去响应,即Application.DoEvents()方法,此方法可以让界面线程执行正在等待执行的一系列事件,然后再执行下面的语句,你可以封装这样一个方法来实现延迟执行代码效果:

public void 延迟(int 毫秒)

{

var t=DateTime.Now.AddMilliseconds(毫秒);

while(DateTime.Now<t)Application.DoEvents();

}

使用时只需:

语句1……;

语句2……;

延迟(6000);

语句3……

这样就可以实现延迟。

 

方案方面:

各个免费邮箱的smtp服务都是有不同限制的,有些是限制每天的发送数量,有些是限制每小时发送数量,有些是限制连续发送间隔时间。

同一网站注册多个账号往往也不起作用,因为服务器一般都是以IP地址作为判断依据。

在多个网站注册能够较大程度的降低单个smtp服务的使用频率,有助于减少被冻结、封停的几率。

更好的方案应该是在本机或自有服务器上自设smtp服务,然后通过自己的服务发送,就没有什么限制了,但应注意,如果频繁发送垃圾邮件的话,还是会被各个邮箱服务商列入黑名单,拒收你的邮件的。

收获园豆:100
斯克迪亚 | 老鸟四级 |园豆:4124 | 2009-09-16 14:37
Application.DoEvents();//excellent method!
邀月 | 园豆:25475 (高人七级) | 2009-09-16 16:49
其他回答(4)
0

代码看不到。

给两个思路:

1、配置多个SMTP服务器账号,群发软件一般般会自动交替使用,这样的话,在每个SMTP服务器看来,你的发送就不是连续的了,你也就不容易被封掉。主流的支持SMTP发送的邮箱,不论是免费的还是收费的,每天的发送量大概在100到400左右。每天适当控制每个Email帐号(即发送服务器)发送200封左右;适可而止,不要过分发送

2、你完全可以作为windows服务,在app.config中自由设置间隔的时间。

3、一定要在cs程序中运行。可以参考:

Thread th = new Thread(new ThreadStart(你的方法名称));
th.Priority
= ThreadPriority.AboveNormal;
th.Start();
Thread.Sleep(
3000);

补充:这里有关于windows service的演示:

http://www.cnblogs.com/downmoon/archive/2009/09/16/1567643.html

收获园豆:100
邀月 | 园豆:25475 (高人七级) | 2009-09-16 06:48
0

支持以上回答

一颗烂笔头儿 | 园豆:155 (初学一级) | 2009-09-16 16:52
0

用线程控制

紫陌 | 园豆:220 (菜鸟二级) | 2009-09-16 17:07
0

用线程来实现。

风浪 | 园豆:2996 (老鸟四级) | 2009-09-16 17:29
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册