Avatar billede speedpete Nybegynder
01. april 2009 - 08:33 Der er 3 kommentarer og
1 løsning

tråde og callbacks/events

Nedenstående kode starter en masse tråde op, som hver sender én email (client.SendAsync(message, nyhedsbrev)). Når hver tråd er færdig, kalder de tilbage til client_SendCompleted i hovedtråden. Spørgsmålet er, om dette er en korrekt arkitektur? Skal man trådsikre client_SendCompleted? Eller ligger der noget kø-håndtering i .NET's event-håndtering, således at man automatisk er sikret mod at trådene falder over hinanden inde i client_SendCompleted?

-----------------

public void SendNyhedsbrevTilModtagerne()
{
foreach (KeyValuePair modtager in modtagere.Modtagerliste)
{
using (MailMessage message = new MailMessage(senderEmail, modtager.Value.Email))
{
message.Subject = nyhedsbrev.Subject;
message.Body = nyhedsbrev.Body;
message.IsBodyHtml = true;
SmtpClient client = new SmtpClient();
client.SendCompleted += new SendCompletedEventHandler(client_SendCompleted);
client.SendAsync(message, nyhedsbrev);
client = null;
}
}
}

void client_SendCompleted(object sender, System.ComponentModel.AsyncCompletedEventArgs e)
{
throw new NotImplementedException();
}
Avatar billede bennytordrup Nybegynder
01. april 2009 - 08:42 #1
For mig ser det OK ud.

Hvad du gør i client_SendCompleted afhænger af, om du skal opdatere GUI eller ej. Hvis du skal, bør du implementere den således:


if (InvokeRequired)
    {
    // Marshal call to GUI thread
    }

else
    {
    // Perform update of GUI.
    // Because InvokeRequired returned false,
    // we know that it is safe to touch GUI elements.
    }
Avatar billede speedpete Nybegynder
01. april 2009 - 09:09 #2
Tak for det hurtige svar. Jeg er ret ny i Windowsprogrammering, så InvokeRequired skal jeg lige undersøge. Jeg har slet ikke implementeret noget GUI endnu. Koden er et uddrag fra en klasse i mellemlaget, som kompileres til en dll, som GUIen skal referere til... måske jeg skal stikke en delegate ned fra GUIen?

Men hvordan med det underliggende? Ved du, om trådene automatisk "venter" ved client_SendCompleted, iogmed vi snakker eventhåndtering (jeg ved ikke, hvordan eventhåndteringen generelt er implemeteret...)?
Avatar billede bennytordrup Nybegynder
01. april 2009 - 09:17 #3
Det må jeg indrømme, at jeg ikke kan huske.
Avatar billede speedpete Nybegynder
01. april 2009 - 09:40 #4
okay, pointsne er dine.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester