C#winform 里面有一个循环,一运行,窗体就死了怎么办

里面有一个发邮件的while循环,我想保证他发邮件的速度要快,就没有设置延时操作,但是实际中,才运行5秒左右这个form就死了没响应了,请问只是什么原因了?该怎么解决了?核心代码如下:
MailMessage mail = new MailMessage();
mail.From = new MailAddress("*******");//发件人
mail.To.Add(new MailAddress(********)); //收件人
SmtpClient client = new SmtpClient();
client.Credentials = new System.Net.NetworkCredential("*********", "*****");
client.Host = "smtp.qq.com";
mail.Subject = "您有一个交友请求";
mail.Body = "您好,这是个调查邮件,只是想知道收件人中有多少人认识yangzitheone,如果你不认识,打扰您了,祝你生活愉快!";
while (qq)
{
client.Send(mail);
}

第1个回答  2013-06-28
while (qq)
{
Application.DoEvents();
client.Send(mail);
}
改成这样就行了!你可以试一下,窗体不会在未响应了!追问

我加入了后还是一样死那里了

追答

Application.DoEvents();这句话绝对能让有死循环的程序不会未响应,所以还是吧你的代码传上来吧,你的问题远没有你形容的那么简单

本回答被提问者和网友采纳
第2个回答  2013-06-28
这个你需要使用多线程或者委托,要么就要使用延时、否则卡死是正常的。
且,建议你最少要延时3秒,否则账号会被封掉的。。
你要想发邮件快的话,必须使用多线程的。
第3个回答  2013-06-28
使用托管方法或开个线程试试
第4个回答  2013-06-28
怎么感觉循环写在那是错的。。。。
第5个回答  2013-06-28
qq是什麽 你不把qq这个变量给我说 我们怎麼知道你怎麼跳出这个循环

C# winform程序,UI界面锁死。如何处理?
Winform 程序,要想保证 UI 不卡死,只有将长耗时任务放到非UI线程运行这一个办法。而且现在早已进入多核时代,软件上多线程设计的思想要是要有的,不然的话,CPU的性能是不能充分利用的。楼主说的方法1与2,如其他回答所说一样,治标不治本。关于多线程编程,楼主可以参考下 Task 。这个类库在线程...

我在c#winform编程中,有一段时间会不断从网上下载数据 这段时间主窗...
你可以用System.Net.WebClient这个类来下载数据,然后为它的下载事件绑定一个方法,因为事件是异步调用的,因此不会造成线程堵塞,给你一段代码看看吧 using System;using System.Collections.Generic;using System.Text;using System.Net;namespace WebClientAsync { public delegate void DownloadDelegate( b...

C#程序窗口假死
用个Timer撒,把执行的代码放在Timer的Tick方法里面,然后窗体上的某方法只执行timer1.Start();就行了.Tick方法第一句写timer1.Stop();下面再放你的代码.你在窗体上直接Sleep()不是卡UI了么. 追问 应该是办法之一,不过有很多步骤, 具体要怎么操作呢,也有些麻烦吧? 追答 我上班的时候做读取窗口的时候就是用...

C# winform程序 MDI窗体在刚开始加载界面时 偶尔会出现界面 卡屏或是...
你在load方法里写的内容处理需要消耗比较多的时间,这样打开窗体时候就会出现卡屏或者假死,如果是这样你可以把方法放shown里,这样界面就会先出现后执行你要的方法。

C#winform使用了多线程,有时候程序再运行中直接就退出了!
直接退出是你的程序后台出现错误或是触发了异常所致,鉴于你同时用了timer和线程去刷新listView数据,可能是你创建线程刷新数据那里出错了~这个需要具体调试,但是我想说的是你的线程和timer 做的是同一件事情,timer本身就是实时去检测并刷新listView数据源的,socket无非是在接受到消息时刷新而已不是实时...

写了一个C#winform程序,在我的电脑上运行没有问题,但是在别人的电脑运...
目测是缺少相关组件,你是否使用了第三方的dll或者其他第三方组件呢,如果有点话,一并放到bin目录下,这样就可以了 还是不行,建议把exe发我一份,测试一下 多谢

c# 小程序陷入死循环
那么drawline函数退出了。Main添加后50个点,只能重新开启新的线程。建议画线直接放进主线程做,不会有太多的效率问题。如果非要这样做,改一下。改成while(i < a2.Count - 1){ g.DrawLine(p, (float)a1[i], (float)a2[i], (float)a1[i + 1], (float)a2[i + 1]);i++;} ...

c#,在FORM1,无限执行一个线程
0] == 0){ Invoke(new Action(() => {Y1.BackColor = Color.Yellow; }));\/\/如果是调用界面控件设置颜色时要加}else{Y1.BackColor = Color.GreenYellow;\/\/如果Y1不是界面控件就不要加} System.Threading.Thread.Sleep(10);\/\/让线程延迟一点时间 降低CPU占用}}写一个死循环就好了吧 ...

C#Winform中一个按钮暂停和继续另一个按钮中的循环事件,该怎么...
你设计的如果不是多线程程序的话,button1中的循环不执行完是不会响应button2的事件的。

C#WinForm中如何实现长摁一个按钮button实现循环执行一个操作,放开就停...
做一个Timer,MouseDown里开启Timer,在Timer的触发事件里做处理,不用循环,设定多久执行一次就好。在MouseUp里关闭Timer。

相似回答