Avatar billede fastpoint Nybegynder
08. juni 2006 - 13:23 Der er 4 kommentarer og
1 løsning

Delegates, Events og Tråde?

Hvad er forskellen? Hvilken relation har de til hinanden?

forstår det slet ikke! har kigget i 2 bøger og søgt lidt men det hjælper mig ikke.. nogen som kan forklare et fjols det?
Avatar billede Slettet bruger
09. juni 2006 - 08:28 #1
Når du har dit program, kører det i en tråd. Her kan du have en masse events i, fx et event der opfanger når du trykker på en knap. En event er bare en funktion der er bundet til den knap når den bliver trykket på. Hvis vi nu siger du vil lave en fil-søgnings funktion, det siger sig selv at denne vil optage en hel den cpu resoucer, og da den funktion er nød til at køre i et loop (while fx) vil alt andet end den funktion ikke virke i dit program før den funktion slutter. Dvs at prøver du at klikke på en knap eller andet i dit program, vil det sige (svarer ikke). Derfor kan du så køre den søge funktion i en seperart tråd der kører i dit program, på den måde kan du bruge din form imens den arbejder, da main tråden ikke bliver blokket. Delegates bruger man så til at flere tråde kan snakke sammen. Fx hvis du har den søgetråd, og du vil sætte det den finder i et listview. så skal man lave en delegate og invoke på det listview, ellers vil den komme og sige en cross-threading fejl, fordi to tråde ikke direkte kan snakke sammen, og da dit litview befinder sig i din main tråd..

Giver det mening?
Avatar billede fastpoint Nybegynder
10. juni 2006 - 10:45 #2
Okay, men java har ikke delegates så hvordan klare java det? hvis 2 tråde skal snakke sammen:) Det kunne være fedt hvis du vidste det.

kan du forklare mig hvordan denne kode fungere for så er jeg helt med!

denne metode bliver kaldt fra en tråd
OutputMessage("*LongOperation");

og her det mere relevante

        private delegate void OutputMessageDelegate(string msg);
        private void OutputMessage(string msg)
        {
            if (this.InvokeRequired)
            {
                // if operating on a thread, invoke a delegate
                // on the UI thread.
                OutputMessageDelegate omd =
                    new OutputMessageDelegate(OutputMessage);
                IAsyncResult arx = this.BeginInvoke(
                    omd, new object[] { msg });
                this.EndInvoke(arx);
                return;
            }
            label6.Text = "Your turn";
        }

jeg bruger forresten ikke den parameter der bliver sendt afsted til metoden, men det var copy and paste:) men det kan jeg altid fjerne.

hvordan fungere koden? hvis der kun stod label6.Text = "Your turn";
i metoden så ville den brokke sig over cross thread call som du siger.

hvis du kan forklare det så læg det også som et svar samtidig:)
Avatar billede Slettet bruger
11. juni 2006 - 04:10 #3
Jeg gør sådan her:

Her deklarerer du:

public delegate void DelegateOutputText(string Text);
public DelegateOutputText SetOutputText;


Dette kunne fx stå i den Form1()

//Form1()//
SetOutputText = new DelegateOutputText(SetOutputTextFunction);


//Brug//
this.Invoke(SetOutputText, new Object[] { "Teksten der skal vises" });


Her er fuktionen der bliver kørt ved delegate, her kan du tilgå alt der ligger i din main tråd


private void SetOutputTextFunction(string Text)
{
MessageBox.Show(Text);
}
Avatar billede fastpoint Nybegynder
11. juni 2006 - 14:56 #4
okay så denne sætning

this.Invoke(SetOutputText, new Object[] { "Teksten der skal vises" });

det er altså denne sætning som fortæller form'en eller min main tråd hvilket delegate der skal køres? hvis ja så er mit sidste spørgsmål bare hvorfor man skriver den tekst der skal vises som en parameter i invoke metoden og ikke i sin delegate?

læg et svar i dit indlæg:)
Avatar billede Slettet bruger
11. juni 2006 - 21:26 #5
altså, Der siger du hvilken Delegate der skal køres, altså "SetOutputText", og parametrene funktionen den kører skal have.. dvs hvis du har flere er det:

this.Invoke(SetOutputText, new Object[] { "Teksten der skal vises", "Mere tekst" });

Det kører så den funktion med de parametre. Oppe hvor du declarere din delegate fortæller du kun hvilke parametre den skal bruges, så hvis du ændre det i din funktion, skal du også tilføje det deroppe..
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