heyho,
ich hab heut erstmal ne bissel mit der POP3 Komponente von Indy rumprobiert. Aber mein Program friert momentan ein, wenn ich auf ein Pop3 Konto connecte, während schon ein weiterer Benutzer eingeloggt ist. Ist auch logisch, nach Spezifikation des Pop3 Protokolls: Da auf ein Konto ja nur eine Verbindung zur Zeit statt finden darf. Ich habe das ganze dann über ne Exception abgefangen.
Und hier friert das Programm sich ein. Und zwa ab dem klicken auf Verbinden bis zur Ausgabe der Exception.
Ich würde das einfrieren nun gerne verhindern. Habe in den OnWork meines IdPOP3 über den Objektinspektor auch des Application.ProcessMessages gesetzt, doch funzt es nicht.
Ich benutze keine IdAntifreeze Komponente, da ich gelesen habe das diese auch nur in bestimmten Zeitabständen ein Application.ProcessMessages ausführt.
Ich habe auch mal zu testzwecken die IdAntifreeze Komponente eingesetzt. Damit friert das ganze nicht mehr ein! Würde diese aber nur ungern verwenden, denn selbst ist der mann:)
Um auf das Problem zurück zu kommen: Was mach ich falsch?
Schon aus reiner Neugierde & Interesse würd mich mein fehler beim setzen des Application.ProcessMessages interessieren:)
Hier mal der gesamte Quellcode. Ist momentan nur zum testen gedacht:
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58:
| unit u_main;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient, IdMessageClient, IdPOP3, IdException;
type TPopDown = class(TForm) POP: TIdPOP3; btn_connect: TButton; procedure btn_connectClick(Sender: TObject); procedure POPWork(Sender: TObject; AWorkMode: TWorkMode; const AWorkCount: Integer); private public end;
var PopDown: TPopDown;
implementation
{$R *.dfm}
procedure TPopDown.btn_connectClick(Sender: TObject); begin POP.Host := '127.0.0.1'; POP.Port := 110; POP.Username := 'root'; POP.Password := ''; try POP.Connect(400); except on E:EIdProtocolReplyError do showmessage(E.Message); else showmessage('Irgendwas'); end; if POP.connected then begin showmessage('Connected successfully'); POP.Disconnect; showmessage('Connection closed'); end; end;
procedure TPopDown.POPWork(Sender: TObject; AWorkMode: TWorkMode; const AWorkCount: Integer); begin Application.ProcessMessages; end;
end. |
hippe-di-hop
janos
Moderiert von
Christian S.: Code- durch Delphi-Tags ersetzt.