c#窗口显示问题
我写了个基于P2P 和 UDP传送协议的聊天程序我有个聊天窗口 叫SENDMESSAGE, 它里面的构造是 对方的 IP,PORT,对方发来的信息。
我想着是用WHILE 循环开放自己的端口监听,如果有消息进来 我就用SENDMESSAGE 这个类NEW 一个对象 类似
sendmessage s1= new sendmessage(ip,port,message);然后 s1.show()或者ShowDialog()但是由于在while里面 ShowDialog 会卡主循环 导致后面进来的消息被阻塞 ,但是SHOW 的话 由于在WHILE里面导致不停地刷新使得界面不能显示出来。请问有什么办法解决
c# 聊天 p2p 窗口 --------------------编程问答-------------------- 哥,用多线程处理了么? --------------------编程问答-------------------- 能说下如何多线程处理么 --------------------编程问答-------------------- 用另一个线程来监听端口 这样会卡死UI线程 --------------------编程问答-------------------- 但是那个显示界面那个怎解决 --------------------编程问答-------------------- 显示的那个用委托。 --------------------编程问答-------------------- 能够说下具体怎么了 我现在是卡在ShowDialog()阻塞我的WHILE 导致我的循环不能进行 --------------------编程问答--------------------
private void Form1_Load(object sender, EventArgs e)
{
Thread thread = new Thread(new ThreadStart(TryToListen));
thread.IsBackground = true;
this.Ready += Todo;
thread.Start();
}
private void TryToListen()
{
while (true)
{
//do something
if (this.Ready != null)
{
this.Ready();
}
Thread.Sleep(2000);
}
}
private void Todo()
{
Form2 f2 = new Form2();
f2.ShowDialog();
}
public event Action Ready;
ShowDialog()不行 具体什么原因不清楚 --------------------编程问答-------------------- 谢谢楼上的回帖 是因为 showDialog() 是强制模式 知道窗口关闭前 程序会一直停留在这个上面 --------------------编程问答-------------------- 那个show 还是没解决 大哥 还是 卡在上面 --------------------编程问答-------------------- 用show。别用showdialog --------------------编程问答-------------------- 你看嘛 刚才那位大哥虽然是用事件 但是事件还是放在while里面的 所以我用了SHOW 的话 那个UI 就是不听第刷新 不显示任何东西 --------------------编程问答-------------------- Form2 f2 = null;
private void Form1_Load(object sender, EventArgs e)
{
Thread thread = new Thread(new ThreadStart(TryToListen));
thread.IsBackground = true;
this.Ready += Todo;
thread.Start();
}
private void TryToListen()
{
while (true)
{
//do something
if (this.Ready != null)
{
this.Ready();
}
Thread.Sleep(2000);
}
}
private void Todo()
{
if(f2 == null){
f2 = new Form2();
f2.Show();
}
}
public event Action Ready; --------------------编程问答-------------------- 你如果要显示消息。那么你就把form2开放个公共方法。把收到的消息传进去。显示出来就行了。 --------------------编程问答-------------------- 算了 我贴我的代码吧
我就是跟不同的人聊天 然后把给我发消息的人 跟他的对话框放在DICTIONARY 里面 如果我已经打开了跟这个人聊天的窗口 就直接更新小 如果没就打开心的窗口,但是无论如何 那个 SHOW()就是在WHILIE 里面 我感觉无法避免 那个 S1.SHOW()在 我监听的循环里面 --------------------编程问答-------------------- 你用event。已经不在那个循环里做了。
补充:.NET技术 , C#