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

关于多窗体聊天的线程问题
我想编写一个类似QQ聊天的窗体,在主窗体中有接收服务器转发来的消息,然后在线程中处理,想把消息传到聊天窗体中并让聊天窗体打开 我用了委托 但是打开的窗体 未响应 不知道是什么原因 请求高手指教!! 在线等!!!!
以下是我写的:
 接收信息 case "Send":
  bool result = false;
  FormCollection fc = Application.OpenForms;
  foreach (Form form in fc)
  {
  if (form.Tag == null || form.Tag != str[1])
  {
  result = false;
  }
  else
  {
  result = true;
  break;
  }

  }
  if (!result)
  {
  ReceiveStr(str[4]);
  }

委托: delegate void ReceiveStrDelgate(string infomation);
  public void ReceiveStr(string infomation)
  {
  UserChat.chat ucc = new CharmQQ.UserChat.chat("234567", 2);
  if (ucc.InvokeRequired)
  {
  ReceiveStrDelgate RMD = new ReceiveStrDelgate(ReceiveStr);
  this.Invoke(RMD, infomation);
  }
  else
  {
  ucc.rtbChatInfo.Text += infomation + DateTime.Now.ToString() + "\r\n";
  ucc.Show();
  }
  }

------解决方案--------------------
UserChat.chat ucc = new CharmQQ.UserChat.chat("234567", 2);
放到
if (ucc.InvokeRequired)
的内部 试试
------解决方案--------------------
是写this
“不会执行else中的代码”应该没错,我自己的项目测试的时候我还没遇到执行这里面代码的情况
你的主界面mainForm是一个线程,,要在这个线程里面创建窗体,才对