2014-01-07 171 views
0

试图制作一个简单的IRC客户端供个人使用,所以我安装了Delphi 7和Indy 10,注意到我在德尔福10年没有做任何工作,即使那样, t先进。只是为了玩耍。Delphi 7 Indy 10 ioHandler

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

该代码中的任何内容显然都不会导致崩溃。并请定义崩溃。您需要学习如何使这些报告更加精确。尝试制作一个SSCCE。 –

+0

也许self = nil –

+0

更新了代码 – Deathglider1

回答

3

正如在回答中描述的问题(Delphi 2009) idIRC, MDI, and problems with hangingIRCPrivateMessage运行与阻塞插座相同的线程。不允许在没有适当保护的情况下从此事件处理程序访问GUI。

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