het leidt tot een nieuwe draad voor het verzenden van e-mail.
>> Kan de gebruiker vanaf dat ogenblik om het even wat binnen de toepassing doen?
zeker. maar er zijn twee dingen die u moet controleren:
1. de gebruiker wil van uw toepassing ophouden met maar e-mail verzenden nog. In dit geval kunt u de draad eindigen of op zijn het eindigen wachten
2. verander geen query1, edit1, edit2 omdat de draad hen gebruikt
>> Wat als een fout voorkomt. Zal de gebruiker nog dit kunnen krijgen?
Ja, uw poging/behalve/showmessage nog werk:
probeer
IdSMTP.Connect;
IdSMTP.Send (IdMsg);
behalve
Showmessage („Fout wanneer het verzenden van E-mail“);
eind;
Het zou beter zijn om allen te verpakken uitvoert methode in poging/behalve te gelijkaardig dit:
procedure TEmailThread.Execute;
var IdSMTP: TIdSMTP;
IdMsg: TIdMessage;
I: Geheel;
begin
probeer
IdSMTP: =TIdSMTP.Create (nul);
IdSMTP.Host: = ' my.domain.nl'; // vervangen door uw uitgaande server
IdSMTP.Port: =25;
IdSMTP.Username: = „MyUserName“;
IdSMTP.Password: = „MyPassword“;
probeer
als NIET IdSMTP.Connected toen
IdSMTP.Connect;
Voor I: = 0 aan Query1.Recordcount -1
begin
indien Geëindigde$ dan Uitgang;
probeer
IdMsg: =TIdMessage.Create (nul);
IdMsg.From.Address: = edit1.Text;
IdMsg.Subject: = edit2.text;
IdMsg.Recipients.EMailAddresses: = Query1.FieldByName („E-mail“). Tekst;
// Begin één of andere functie om lichaam per klant te personaliseren
IdMsg.Body.Text: = PersonalizeEmailForCustomer;
probeer
IdSMTP.Connect;
IdSMTP.Send (IdMsg);
behalve
op E: De uitzondering
Showmessage („Fout wanneer het verzenden van E-mail: “ + E.Message);
eind;
tot slot
IdMsg.Free;
eind;
Query1.Next;
eind;
tot slot
als IdSMTP.Connected toen
IdSMTP.Disconnect;
IdSMTP.Free;
eind;
behalve
op E: De uitzondering
Showmessage („Fout wanneer het verzenden van E-mail: “ + E.Message);
eind;
eind;
>> Is het nog mogelijk om de eindgebruiker dat het verzenden mee te delen heeft geëindigd, show wat voortvloeit?
U kunt bericht gebruiken OnTerminate of
met (Ware) TEmailThread.Create
begin
OnTerminate: = ThreadOnTerminate;
FreeOnTerminate: = Waar;
Hervat;
eind;
procedure TMainForm.ThreadOnTerminate (ASender: TObject);
begin
ShowMessage (het „Werk wordt gedaan“);
eind;
>> Daarom moet ik die inhoud tot de draad op de een of andere manier overgaan
u kunt tot de draad om het even welke parameters overgaan u via zijn aannemer houdt van. Bijvoorbeeld:
TEmailThread = klasse (TThread)
privé
FSubject: koord;
beschermd
de procedure voert uit; opheffing;
openbaar
de aannemer cre�ërt (const ASubject: koord);
eind;
aannemer TEmailThread.Create (const ASubject: koord);
begin
geërftn cre�ër (Waar);
FSubject: = ASubject;
eind;
procedure TEmailThread.Execute;
…
// gebruikend lokale var
IdMsg.Subject: = FSubject; // was IdMsg.Subject: = edit2.text;