尝试制作一个简单的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事件的备忘录的工作示例,那将会很棒:)
答案 0 :(得分:3)
如问题(Delphi 2009) idIRC, MDI, and problems with hanging
的答案中所述,IRCPrivateMessage
与阻塞套接字在同一个线程中运行。不允许在没有适当保护的情况下从此事件处理程序访问GUI。
您需要使用Synchronize
,Queue
或其他技巧,例如将消息发布到主线程。