Hallo,
ich habe zum Test fürs Threading eine kleine Anwendung erstellt, welche simple Berechnungen durchführt. Da ich in dem Thema nicht wirklich drin bin, hab ich nur ein kleines Beispiel zum Testen gebastelt. Meine Frage wäre, wie ich den Thread wieder sauber beende. Es wird zwar alles berechnet und angezeigt in der textbox2, jedoch läuft der Thread nach den Berechnungen weiter (was auch immer dieser dann im Hintergrund noch tut... wahrscheinlich ist er "idle")
// summiere 3 Zahlen aus Array
if (radioButton2.Checked && isRadbioButtonSelected)
{
new Thread(() =>
{
Thread.CurrentThread.IsBackground = true;
for (int i = 0; i < zahlenArrayLaenge - 1; i++)
{
for (int j = i + 1; j < zahlenArrayLaenge; j++)
{
for (int k = j+1; k < zahlenArrayLaenge; k++)
{
if (Convert.ToDouble(stringArray[i]) + Convert.ToDouble(stringArray[j]) + Convert.ToDouble(stringArray[k]) == sum)
{
textBox2.Invoke((MethodInvoker)(() => textBox2.AppendText(sum + " = " + stringArray[i] + " + " + stringArray[j] + " + " + stringArray[k] + Environment.NewLine)));
counter++;
}
}
}
}
//Thread.CurrentThread.Abort(); Thread.CurrentThread.Join();
}).Start();
//Application.ExitThread();
//Environment.Exit(0);
//Thread.CurrentThread.Abort();
//Thread.CurrentThread.Join();
}
Wenn du dir sicher bist, dass der Thread noch läuft, kann dies ja nur bedeuten, dass er durch deine verschachtelten Schleifen noch nicht vollständig durchgelaufen ist.
Je nachdem wie groß der Wert in zahlenArrayLaenge ist, dürfte dies auch einige Zeit dauern.
Anstelle eines eigenen Threads könntest du dir auch mal async/await anschauen.
Eigene Threads sollte man nicht mehr anlegen, da man damit den .NET ThreadPool umgeht und das erstellen neuer Threads zusätzliche Resourcen kostet.
Ebenfalls solltest du dir vorab auch Tasks in .NET anschauen, auf die dann auch async/await aufbaut.
Ist natürlich noch etwas früh für async/await, aber dies ist für das arbeiten mit asynchronem Code in der UI gedacht.
T-Virus
Developer, Developer, Developer, Developer....
99 little bugs in the code, 99 little bugs. Take one down, patch it around, 117 little bugs in the code.
jedoch läuft der Thread nach den Berechnungen weiter
Woran merkst du das?
Ist zwar auskommentiert aber ein Join auf den CurrentThread ist nicht sehr hilfreich. Das wartet bis der Thread beendet ist und wenn der aktuelle Thread sich nicht beenden kann weil er darauf wartet bis er beendet ist...
Ist natürlich noch etwas früh für async/await
Find ich auch. Erst mal Erfahrungen sammeln halte ich für unbedingt nötig. Sonst beschäftigt sich jemand nur mit High End Dingen und wird die niemals vollständig verstehen, weil alle Grundlagen fehlen.
Welchen Vorteil hätte async/await hier?
Ist natürlich noch etwas früh für async/await, aber dies ist für das arbeiten mit asynchronem Code in der UI gedacht.
Der Ursprung kommt vom Arbeiten mit asynchronen Kommunikationskanälen.
Aber async/await kann auch für UI verwendet werden - jedoch nicht für alles. Gerade Berechnungen müssen/sollten weiter in einen eigenen Thread/Task abgeführt werden.
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code