Delphi 7 Indy 10 ioHandler

时间:2014-01-07 09:48:55

标签: delphi irc indy10

尝试制作一个简单的IRC客户端供个人使用所以我安装了Delphi 7和Indy 10,请注意我在delphi中没有做过10年(?)年的任何工作,即便如此,它还没有那么先进。只是为了玩。

procedure TForm1.IRCPrivateMessage(ASender: TIdContext; const ANickname,
  AHost, ATarget, AMessage: String);
begin
  if ATarget = '#channel' then
  begin
    Memo1.Lines.Add('[' + TimeToStr(Time) + '] <' + ANickname + '> ' + Amessage);
  end;
  if ATarget = '#channel2' then
  begin
    Memo2.Lines.Add('[' + TimeToStr(Time) + '] <' + ANickname + '> ' + Amessage);
  end;
end;

由于两次使用Amessage,这会冻结程序吗?

如果有人能够向我展示一个有关时间,昵称和消息被添加到privatemessage事件的备忘录的工作示例,那将会很棒:)

1 个答案:

答案 0 :(得分:3)

如问题(Delphi 2009) idIRC, MDI, and problems with hanging的答案中所述,IRCPrivateMessage与阻塞套接字在同一个线程中运行。不允许在没有适当保护的情况下从此事件处理程序访问GUI。

您需要使用SynchronizeQueue或其他技巧,例如将消息发布到主线程。