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?
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
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);
};
Wo auch immer das dort oben her stammt: vergiss es
Ob du nun anonyme Methoden oder benannte verwendest, ändert am Prinzip nichts...
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 🙂
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.
Ich habe mein Beispiel oben noch mal editiert, vielleicht lässt sich das Ganze so besser lesen =)