哪位大神帮我看看这个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(); //调用监听方法
}
}
} 展开
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(); //调用监听方法
}
}
} 展开
4个回答
展开全部
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);
}
{
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);
}
展开全部
while 循环里面写这么一句Application.DoEvents,用来交出CPU使用权,程序不会卡死,不过最好的办法还是开线程!
追问
不行 加到里面 你能把整个运行好的程序 写好吗 可以追加分也可以的 谢谢你了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
死循环里要sleep(0)
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
多线程实现。
最好再加个sleep
最好再加个sleep
追问
具体怎么改啊
追答
sleep 写到 StartListener() 这个方法
System.Threading.Thread thread = new System.Threading.Thread(new System.Threading.ThreadStart(StartListener));
thread.Start();
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询