Registrierung Kalender Mitgliederliste Teammitglieder Suche Häufig gestellte Fragen Zur Startseite

Informatiker Board » Themengebiete » Praktische Informatik » Thread deklarieren » Hallo Gast [Anmelden|Registrieren]
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | An Freund senden | Thema zu Favoriten hinzufügen
Neues Thema erstellen Antwort erstellen
Zum Ende der Seite springen Thread deklarieren
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
Haevelin
Tripel-As


Dabei seit: 04.06.2013
Beiträge: 221

Thread deklarieren Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

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?
11.01.2015 18:58 Haevelin ist offline Beiträge von Haevelin suchen Nehmen Sie Haevelin in Ihre Freundesliste auf
eulerscheZahl eulerscheZahl ist männlich
Foren Gott


Dabei seit: 04.01.2013
Beiträge: 2.859

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

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


__________________
Syntax Highlighting fürs Board (Link)

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von eulerscheZahl: 11.01.2015 19:24.

11.01.2015 19:20 eulerscheZahl ist offline Beiträge von eulerscheZahl suchen Nehmen Sie eulerscheZahl in Ihre Freundesliste auf
Baumstruktur | Brettstruktur
Gehe zu:
Neues Thema erstellen Antwort erstellen
Informatiker Board » Themengebiete » Praktische Informatik » Thread deklarieren