WinFuture-Forum.de: C# - Threads parallelisieren - WinFuture-Forum.de

Zum Inhalt wechseln

Nachrichten zum Thema: Entwicklung
Seite 1 von 1

C# - Threads parallelisieren


#1 Mitglied ist offline   sentropie 

  • Gruppe: aktive Mitglieder
  • Beiträge: 28
  • Beigetreten: 11. April 08
  • Reputation: 0

geschrieben 08. Oktober 2010 - 09:59

Hallo,

ich lerne momentan C# und versuche mich an einem WindowsForms-Programm, in welchem ich mit Threads herumspiele. Im Prinzip besteht das Fenster aus einem Button und zwei Textboxen. Beim Klick auf den Button soll in beiden Textboxen gleichzeitig ein Zähler hochlaufen. Bei mir passiert das jedoch schön nacheinander - auch wenn es zufällig erscheint, in welcher Box begonnen wird.

Hier kommt der Code. Ich freue mich auf Ratschläge.

public partial class Form1 : Form
	{
		public Form1()
		{
			InitializeComponent();
		}

		delegate void SetTextCallback();
		private int max = 3000;

		private void fkt1()
		{
			if (InvokeRequired)
			{
				SetTextCallback d = new SetTextCallback(fkt1);
				Invoke(d);
			}
			else
			{
				for (int j = 0; j <= max; j++)
				{
					textBox1.Text = j.ToString();
					textBox1.Refresh();
				}
			}
		}

		private void fkt2()
		{
			if (InvokeRequired)
			{
				SetTextCallback d = new SetTextCallback(fkt2);
				Invoke(d);
			}
			else
			{
				for (int i = 0; i <= max; i++)
				{
					textBox2.Text = i.ToString();
					textBox2.Refresh();
				}
			}						 
		}

		private void button1_Click(object sender, EventArgs e)
		{
			textBox1.Text = "";
			textBox2.Text = "";
		   
			Thread t1 = new Thread(fkt1);
			Thread t2 = new Thread(fkt2);
			t1.IsBackground = true;
			t2.IsBackground = true;
			t1.Start();
			t2.Start();		   
		}
}

Dieser Beitrag wurde von sentropie bearbeitet: 08. Oktober 2010 - 10:05

0

Anzeige



#2 Mitglied ist offline   christoph_hausner 

  • Gruppe: aktive Mitglieder
  • Beiträge: 68
  • Beigetreten: 23. August 07
  • Reputation: 0

geschrieben 08. Oktober 2010 - 19:50

Hi,

"SetTextCallback" ist überflüssig, verwende einfach das "Action"-Delegate ohne generische Parameter, das ist so bereits im Framework definiert. Für Methoden die einen Rückgabewert haben kann man übrigens "Func" verwenden.

Zu deinem Problem: Versuch einmal ein Thread.Sleep in die Schleifen einzubauen. Dein Beispiel ist etwas unglücklich gewählt denke ich, da kann es gut sein dass ein Thread den anderen blockiert.
0

Thema verteilen:


Seite 1 von 1

1 Besucher lesen dieses Thema
Mitglieder: 0, Gäste: 1, unsichtbare Mitglieder: 0