Frage zu Threading

08/04/2008 - 12:34 von Tobias Hebel | Report spam
Hi,

ich würde gerne mehrere Objekte in eigenen Threads laufen lassen. Leider
habe ich einige Umgewöhnungsprobleme von Java. Dort ist es ja so, dass
man eine Klasse von Thread ableitet bzw. das Interface Runnable
implementiert und den neuen Thread dann einfach mit Thread.start() startet.

Geht sowas in .NET (C#) auch?
Im Moment sehe ich nur den folgenden Weg, den ich ziemlich umstàndlich
finde:

public class MyThreadClass
{
// irgendeine regelmàßige Funktionalitàt, im Moment mit Timer
// realisiert.
}

Und dann im Hauptprogramm:

Thread t = new Thread(new ThreadStart(threadClassStarterMethod));
t.start();

public void threadClassStarterMethod()
{
MyThreadClass bla = new MyThreadClass()
}

Würde das überhaupt funktionieren? Oder würde das Object nach dem Ende
der Methode sofort wieder zerstört werden?

mfg
Tobias
 

Lesen sie die antworten

#1 Mario Fraiß
08/04/2008 - 18:41 | Warnen spam
Am Tue, 08 Apr 2008 12:34:11 +0200 schrieb Tobias Hebel:

Hi,

ich würde gerne mehrere Objekte in eigenen Threads laufen lassen. Leider
habe ich einige Umgewöhnungsprobleme von Java. Dort ist es ja so, dass
man eine Klasse von Thread ableitet bzw. das Interface Runnable
implementiert und den neuen Thread dann einfach mit Thread.start() startet.

Geht sowas in .NET (C#) auch?
Im Moment sehe ich nur den folgenden Weg, den ich ziemlich umstàndlich
finde:

public class MyThreadClass
{
// irgendeine regelmàßige Funktionalitàt, im Moment mit Timer
// realisiert.
}

Und dann im Hauptprogramm:

Thread t = new Thread(new ThreadStart(threadClassStarterMethod));
t.start();

public void threadClassStarterMethod()
{
MyThreadClass bla = new MyThreadClass()
}

Würde das überhaupt funktionieren? Oder würde das Object nach dem Ende
der Methode sofort wieder zerstört werden?

mfg
Tobias



Hallo Tobias,

Soetwas wie Runnable (was zweifelsohne unter Java sehr praktisch ist) gibt
es in .Net nicht so in der Art.

Damit dein Objekt "lebt" muss die Methode die im ThreadStart ausgeführt
(delegiert) wird, entsprechend laufen. In deinem Beispiel tut sie das
nicht. Funktionieren würde:

public class MyThreadClass
{
// irgendeine regelmàßige Funktionalitàt, im Moment mit Timer
// realisiert.
}


Thread t = new Thread(new ThreadStart(threadClassStarterMethod));
t.start();

public void threadClassStarterMethod()
{
MyThreadClass bla = new MyThreadClass()

while(true)
{
//tu irgendwas
}
}

[UNTESTED]

Sprich, das Objekt existiert ja nur "local" im Rahmen der
threadClassStarterMethod.

Lg, Mario Fraiß (Software-Architect und .Net-Engineer)
_____
www.mariofraiss.com

Ähnliche fragen