哪位大神帮我看看这个c#的程序,是一直处于监听状态,但是运行后,程序就卡死了,怎么修改 5

usingSystem;usingSystem.Collections.Generic;usingSystem.ComponentModel;usingSystem.Da... using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Net;
using System.Net.Sockets;
using System.Threading;

namespace 聊天__qq群
{
public partial class Form1 : Form
{

bool done = false;

public Form1()
{
InitializeComponent();
}
private void StartListener()
{
UdpClient listener = new UdpClient(int.Parse(textBox1.Text.ToString().Trim())); //使用UDP协议
IPEndPoint groupEP = new IPEndPoint(IPAddress.Any, int.Parse(textBox1.Text.ToString().Trim())); //任意IP,
try
{
while (!done)//使用永真循环另其一直处于监听状态
{

byte[] bytes = listener.Receive(ref groupEP);
string strIP;
strIP = "信息来自" + groupEP.Address.ToString();//获得发信人的IP
string strInfo = Encoding.GetEncoding("gb2312").GetString(bytes, 0, bytes.Length);//获得信息
MessageBox.Show(strInfo, strIP);
}
}
catch (Exception e)
{ Console.WriteLine(e.ToString()); }
finally { listener.Close(); }

}
private void Form1_Load(object sender, EventArgs e)
{

}

private void button1_Click(object sender, EventArgs e)
{
StartListener(); //调用监听方法
}

}
}
展开
 我来答
四叶草知识小铺
2013-06-07 · 超过52用户采纳过TA的回答
知道小有建树答主
回答量:162
采纳率:50%
帮助的人:130万
展开全部
while (!done)//使用永真循环另其一直处于监听状态
{
Thread.Sleep(100) ;//休息100毫秒,切换进程,否则会死循环卡死
byte[] bytes = listener.Receive(ref groupEP);
string strIP;
strIP = "信息来自" + groupEP.Address.ToString();//获得发信人的IP
string strInfo = Encoding.GetEncoding("gb2312").GetString(bytes, 0, bytes.Length);//获得信息
MessageBox.Show(strInfo, strIP);
}
yqsky3964
2013-06-06 · TA获得超过1875个赞
知道小有建树答主
回答量:1184
采纳率:0%
帮助的人:667万
展开全部
while 循环里面写这么一句Application.DoEvents,用来交出CPU使用权,程序不会卡死,不过最好的办法还是开线程!
追问
不行  加到里面 你能把整个运行好的程序 写好吗  可以追加分也可以的  谢谢你了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
llxzj60
2013-06-07
知道答主
回答量:21
采纳率:0%
帮助的人:13.5万
展开全部
死循环里要sleep(0)
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
zxx_zjl
2013-06-06 · 超过17用户采纳过TA的回答
知道答主
回答量:66
采纳率:100%
帮助的人:46.3万
展开全部
多线程实现。
最好再加个sleep
追问
具体怎么改啊
追答
sleep 写到 StartListener() 这个方法

System.Threading.Thread thread = new System.Threading.Thread(new System.Threading.ThreadStart(StartListener));
thread.Start();
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式