难题, 跨线程窗口调用!
在给客户做的一个程序中附带一个聊天程序, 若先在主窗口创建聊天窗口, 一切正常, 但消息触发创建的窗口, 主程序在调用时, 出现跨线程控件调用错误, 怎么处理, 谢谢拉!!!!!
------解决方案--------------------你这里边还有一个问题:
生成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把对象传进去啊
这么简单的问题