Laden...

Parameterisierte Threads + Methode per Thread?

Erstellt von srynoname vor 17 Jahren Letzter Beitrag vor 17 Jahren 1.459 Views
S
srynoname Themenstarter:in
223 Beiträge seit 2006
vor 17 Jahren
Parameterisierte Threads + Methode per Thread?

hallo,
habe folgendes problem:
ich möchte eine öffentliche methode einer klasse mit parametern in einem neuen thread aufrufen - aber wie geht das?
habe schon gesucht und bin auf das hier gestoßen:

ThreadStart starter = new ThreadStart()
{
    Fetch (myUrl);
};
new Thread(starter).Start();

http://www.yoda.arachsys.com/csharp/threadstart.html

da sagt mir visual studio aber immer, es vermisse ein semikolon nach new ThreadStart() - geht es denn so (simpel) überhaupt nicht, oder ist schlichtweg nur die syntax dieses code schnipsels auf der webseite falsch?

B
1.529 Beiträge seit 2006
vor 17 Jahren
internal class myThreadData{ // ... }
private void myThreadProc( object obj )
{
   myThreadData data = obj as myThreadData;
   if (data == null)
   {
      return;
   }
   // tue was auch immer
}

// irgendwo anders
myThreadData data = new myThreadData();
// data füllen
Thread myWorker = new Thread(new ParameterizedThreadStart(myThreadProc));
myWorker.Start( data );
// irgendwas anderes tun
// evtl. mittels myWorker.Join() auf den Thread warten
// data wieder auslesen
55 Beiträge seit 2006
vor 17 Jahren

Also, ich würde dir raten, das du dir mal etwas zum Thema ParameterizedThreadStart aus der MSDN zu gemüte führst. Wo auch immer das dort oben her stammt: vergiss es 😉

per ParameterizedThreadStart kann das Ganze dann z.B. so aussehen:


ParameterizedThreadStart ts = delegate(object myObject)
          {
            MyClass.myMethod(Parameter);
          };

B
1.529 Beiträge seit 2006
vor 17 Jahren

Wo auch immer das dort oben her stammt: vergiss es

Ob du nun anonyme Methoden oder benannte verwendest, ändert am Prinzip nichts...

55 Beiträge seit 2006
vor 17 Jahren

Das ist richtig, aber "schöner" sind benannte dann doch. Kommt natürlich immer ganz drauf an, aber anonyme Methoden sind beim Lesen des Codes, von Dritten, kein schöner Anblick 🙂

S
srynoname Themenstarter:in
223 Beiträge seit 2006
vor 17 Jahren

danke für eure vielen antworten, habe auch den msdn artikel gelesen, aber ich verstehs einfach net ):

also ich habe folgendes:

meineklasse class1 = new meineklasse();

und diese klasse hat die öffentliche methode:
class1.publicmethod(parameter1, parameter2);

diese will ich nun in einem thread ausführen.
so wie ich das verstanden habe, muss ich alle parameter in ein objekt stecken.
was ich nicht so ganz verstanden habe ist, wie ich das mache und ob ich die daten dann wieder manuell aus dem objekt extrahieren muss, d.h. den code meiner "publicmethod" noch abändern muss? danke.

55 Beiträge seit 2006
vor 17 Jahren

Ich habe mein Beispiel oben noch mal editiert, vielleicht lässt sich das Ganze so besser lesen =)