日期:2014-05-18  浏览次数:20975 次

有个多线程的问题
一个主程序,用于显示窗体。一个监控程序,用socket。现在要把监控程序集成到主程序中,由于监控程序在accept的时候就阻止了,所以主窗体无法显示。用一个新线程执行监控程序,但监控程序要使用主窗体控件的句柄(比如form),要怎样把主窗体的句柄传到监控程序,又不到导致报异常(操作非线程控件),谢谢!!!!

------解决方案--------------------
用委托
------解决方案--------------------
可能消息列队的没有处理好放在accept之前呢
 Application.DoEvents();
------解决方案--------------------
主线程中写
SynchronizationContext mainThreadSynContext = SynchronizationContext.Current;
子线程写
mainThreadSynContext.Post(new SendOrPostCallback(你要通知界面的方法));
所有子线程需要通知界面的话都需要同步到主线程执行
------解决方案--------------------
异步Socket
------解决方案--------------------
只能用委托,因为在线程之间传递FROM会提示建立的执行绪不同.
------解决方案--------------------
譬如说你加个方法叫
void Connected(object state)//state参数你可以自己定义,把线程中的信息发过来,它就是Post的第二个参数
{
这儿操作界面,告诉用户已连接
}
------解决方案--------------------
在其他线程操作控件时候要使用委托.
 //起用委托
this.Invoke(new MethodInvoker(DisplayReceiveMessage));

------解决方案--------------------
+吧 我发个我曾经做的一例字给你吧 190232735