2014-01-07 113 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或其他技術,如發佈消息到主線程。