Avatar billede Slettet bruger
22. marts 2009 - 22:25 Der er 10 kommentarer og
1 løsning

Thread-problem

Hej eksperter,

Her er lidt kode:

// I klassen Program - under Main()
string target = "http://www.ovrkll.com/";
MatchCollection matches = Regex.Matches(Connection.LoadSource(target), "<a [^<>]*href=\"([^<>]+)\"[^<>]*>([^<>]+)</a>");
foreach (Match m in matches)
{
    CurrentName = m.Groups[2].Value;
    CurrentTarget = Connection.GetAbsoluteUrl(target, m.Groups[1].Value);
    Threads.Add(new Thread(new ThreadStart(AnalyzeLink)));
    Threads.Last().Start();
}
while (!ThreadsStopped())
    Thread.Sleep(1000);

// En metode - også i Program
private static void AnalyzeLink(string name, string target)
{
    new Site(Program.CurrentName, Program.CurrentTarget);
}

Det giver følgende fejl:

No overload for 'AnalyzeLink' matches delegate

Hvad kan der være galt?
Avatar billede Syska Mester
22. marts 2009 - 23:02 #1
Din AnalyzeLink må ikke have nogen parameter med ...

Så skal du lave noget ala:
System.Threading.Thread t = new System.Threading.Thread(new System.Threading.ParameterizedThreadStart(Ana));
object o = new object();
t.Start(o);

og med en function:
public void Ana(object o)
{
}

Du kan så sende en class med og caste den tilbage i din funktion ... eneste måde jeg ved det kan lave sig gøre på ..

// ouT
Avatar billede Slettet bruger
22. marts 2009 - 23:07 #2
Hov! Jeg oprettede netop CurrentName/-Target for at undgå parametre - og så glemte jeg at slette dem i metoden :) Whoops!

Tak for hjælpen... Gif svar.
Avatar billede arne_v Ekspert
22. marts 2009 - 23:21 #3
Jeg bruger tit teknikken med at have en klasse med argumenter til constructor og en Run metode - og lave et objekt og bruge det objekts Run til ThreadStart.

Det virker. Og det virker så velkendt for mig, fordi det er måden man gør det på i Java.
Avatar billede Slettet bruger
23. marts 2009 - 00:13 #4
Lyder fornuftigt - men hvordan kan det være, at man ikke kan sende argumenter med? Det lyder lidt som et teknisk krumspring, da det måske ville være besværligt for Mikroblød at holde styr på lokale variable videresendt til nye tråde...?
Avatar billede arne_v Ekspert
23. marts 2009 - 00:17 #5
Det er jo det du gør med buzzzz's metode.

Husk at det er:

t.Start(o);

ikke:

Thread t = new Thread(new ParameterizedThreadStart(Ana));

som kalder Ana.
Avatar billede Slettet bruger
23. marts 2009 - 00:24 #6
Ja, men det falder en del uden for C#-stilen - normalt modkæmper sproget jo slamkode ved konsekvent at være ligefremt objektorienteret og således undgå kejtet metodebrug og lignende, hvorfor jeg synes, at det er lidt en upassende måde at løse problemet på... Men ja, løsningen er der, og hvis den virker, er det vel fint nok - selvom jeg tager den om end mindre elegante dog for mig mere indlysende variabelløsning.
Avatar billede arne_v Ekspert
23. marts 2009 - 00:27 #7
Tja. Jeg er sådan set ikke uenig. Men det er som det.

Og som sagt bruger jeg selv en lidt anden stil.
Avatar billede Syska Mester
23. marts 2009 - 09:24 #8
svar.
Avatar billede Slettet bruger
23. marts 2009 - 11:18 #9
Det var så en kommentar :)
Avatar billede Syska Mester
23. marts 2009 - 11:32 #10
bahhh, sådan går det tidligt om morgenen ... nu kommer der et svar.
Avatar billede Slettet bruger
23. marts 2009 - 13:07 #11
:)))
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