当前位置:编程学习 > C#/ASP.NET >>

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#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,