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

难题, 跨线程窗口调用!
在给客户做的一个程序中附带一个聊天程序,   若先在主窗口创建聊天窗口,   一切正常,   但消息触发创建的窗口,   主程序在调用时,   出现跨线程控件调用错误,   怎么处理,   谢谢拉!!!!!

------解决方案--------------------
你这里边还有一个问题:

生成ChatRoom也需要在主线程上,也就是说 CreateChatRoom()也要在主线程上运行,这样改:

public void ShowChatRoom()
{

//myControl: 是一个主线程上生成的Control
/在这里实际上不用判断 if (room.InvokeRequired)
myControl.Invoke(new EmptyMethod(CreateChatRoom));

}


//把Show(); 和 BringToFront(); 也加到这里边去.
public ChatRoom CreateChatRoom()
{
if (chatRoom == null)
{
chatRoom = new ChatRoom(repeater.UserID, repeater.UserName, server);
chatRoom.Disposed += new EventHandler(chatRoom_Disposed);
chatRoom.Show();
chatRoom.BringToFront();
}
return chatRoom;
}

------解决方案--------------------
那就不要用show了。就这样
ChatRoom room = CreateChatRoom();
room.Show();
Application.Run(room);
------解决方案--------------------
是不是 另外一个线成的方法修改住线程的控件? 那 的转回主线程执行
------解决方案--------------------
用一个委托沟上.然后到主线程执行
------解决方案--------------------
把需要的资源作成全局的 就可以了

或者用REF把对象传进去啊
这么简单的问题