日期:2014-05-19  浏览次数:21017 次

求助:C#中多线程的Form问题
小弟最近学习   想做一个聊天的小程序

当客户端A   和   客户端B   通讯的时候

A   接受到   B   的消息

A在事件处理中new   一个Form   FormMsg     并Show()

然后   调用   FormMsg   的方法(显示消息)


程序运行后,可以看到在B发出消息后,A弹出了Form,并且Form上也显示了数据,但是显示完数据后,Form就无法响应了

因为A和B接受发送数据都是多线程的   我想这可能和多线程与Form有关吧   网上看了几篇都不是很懂  

请大侠们指教!


A   中处理接受消息的事件:(大意如此)

private   void   StringInputHandler(String   Data)
{
        FormMSG   newForm   =   new   FormMSG();
        newForm.Show();
        newForm.ShowText(Data);
}

小弟先谢谢大家了!!

------解决方案--------------------
哇学 c/s 结构啦  .我没做过.帮你顶下.
------解决方案--------------------
i think you should attach a thread to "newForm ", to let it deal with messages and commands such as mouse click. Otherwise it will not respond to anything...
------解决方案--------------------
不懂,帮顶
------解决方案--------------------
问题的原因可能是事件由多线程抛出,窗体由该线程创建,在事件处理完成之后,线程进入下一次消息接收循环,线程一直处于等待接受消息的状态,导致显示的窗体处于假死状态
------解决方案--------------------
form只是一个显示的介质,你应该自己写一个接受的client socket程序,
由这个client socket和你的server进行通讯,然后在client socket中把
接受到的东西往你的form上显示
------解决方案--------------------
关注一下,4年前就快2星了,可是后来不搞.net了,现在回来接点分,争取再升一星!
------解决方案--------------------


问题的原因可能是事件由多线程抛出,窗体由该线程创建,在事件处理完成之后,线程进入下一次消息接收循环,线程一直处于等待接受消息的状态,导致显示的窗体处于假死状态

========================

肯定的,一个消息过来你就new一个窗体 显然不符合常理阿
------解决方案--------------------
去查查委托这个东西,用委托打开你的窗体应该就不会出现这个问题了
------解决方案--------------------
如果你不给我分,我很欣慰,我学到知识了!
如果你给我分,无奈:有人请吃饭,回头饭馆还奖个打火机!
------解决方案--------------------
用异步委托来show窗口,就是beginInvoke。