Informatiker Board (http://www.informatikerboard.de/board/index.php)
- Themengebiete (http://www.informatikerboard.de/board/board.php?boardid=1)
-- Praktische Informatik (http://www.informatikerboard.de/board/board.php?boardid=6)
--- Thread deklarieren (http://www.informatikerboard.de/board/thread.php?threadid=2062)


Geschrieben von Haevelin am 11.01.2015 um 18:58:

  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?



Geschrieben von eulerscheZahl am 11.01.2015 um 19:20:

 

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 });
	}
}


Forensoftware: Burning Board, entwickelt von WoltLab GmbH