Thread deklarieren

Neue Frage »

Auf diesen Beitrag antworten »
Haevelin Thread deklarieren

Hallo,
zur Zeit beschäftige ich mich mit Threads in C#. Dazu wollte ich einen Thread deklarieren, was aber nicht funktioniert. Der Code ist (man habe nachsehen für die Formatierung, aber die Codeeinfügung zerstört die ursprüngliche Gliederung):

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
using System;
 using System.Collections.Generic;
 using System.Linq;
 using System.Text; 
using System.Threading; 
using System.Threading.Tasks;  
namespace A040 
{     
class Program    
 {          
public  int summe(int a, int b)
{             
int sum=0;            
 for (int i = a; i <= b; i++)     
        {                 sum += i;             } 
            return sum;          }         

static void Main(string[] args)        
 {            
 Program addiere= new Program();             
Thread t1 = new Thread(addiere.summe(0, 50)) { Name = "t1" }; ;  
        }     
} 
}


Warum funktioniert die Zeile:

Thread t1 = new Thread(addiere.summe(0, 50)) { Name = "t1" }; ;


nicht?
 
Auf diesen Beitrag antworten »
eulerscheZahl

Wenn die im Thread aufgerufene Funktion Argumente haben soll, musst du diese als Object übergeben. Rückgabewerte kann es logischerweise nicht geben (soll die aufrufende Funktion warten, bis der Thread fertig ist? Dann kann ich es auch gleich im selben Thread machen). Wenn du das Ergebnis brauchst, nimm einen BackgroundWorker, der ruft nach getaner Arbeit RunWorkerCompleted auf.
Und die Funktionsargumente werden auch an anderer Stelle übergeben.

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
class Program
{
	public void summe (object obj) //object als einziges Funktionsargument, Rückgabetyp ist void
	{             
		int[] input = (int[])obj; //unboxing
		int a = input [0];
		int b = input [1];
		int sum = Enumerable.Range (a, b - a + 1).Sum ();
		Console.WriteLine (sum);
	}

	static void Main (string[] args)
	{    
		Program addiere = new Program ();
		ParameterizedThreadStart threadStart = new ParameterizedThreadStart (addiere.summe);
		Thread t1 = new Thread (threadStart) { Name = "t1" };
		t1.Start (new int[] { 0, 50 });
	}
}
 
Neue Frage »
Antworten »


Verwandte Themen

Die Beliebtesten »
Die Größten »
Die Neuesten »