C# - Thread lässt sich nicht beenden

eliasb

Mitglied
Hallo,

ich habe mich vor kurzem mit Threading in C# befasst. Doch jetzt stehe ich vor einem - für mich - grossem Problem, denn der sekundäre Thread lässt sich nicht beenden. Was tun :confused:

Hier mein Code
Code:
using System;
using System.Threading;
using System.IO;
using System.Net.Sockets;

namespace server
{
	class MainClass
	{
		public static void Main(string[] args)
		{
			ThreadStart del = new ThreadStart(Run);
			Thread RunThread = new Thread(del);
			RunThread.Start();
			
			for(;;)
			{
				string eingabe = Console.ReadLine();
				
				if(eingabe.ToLower() == "stop")
				{
					RunThread.Abort();
					
					Console.WriteLine("Sekundärer Thread beendet ...");
					break;
				}
				
			}
			
			
		}
		
		public static void Run()
		{
			int port = 50505;
			// Starten des Listeners
			TcpListener server = new TcpListener(port);
			server.Start();
			
			
			// Warten auf eingehende Verbindung.
			while(true)
			{
				Console.WriteLine("Ich bin Thread #2");
				TcpClient myclient = server.AcceptTcpClient();
			}
		
			
		}
		
	}
}

mfG


//edit: Das Problem liegt wahrscheinlich in dieser Zeile:
TcpClient myclient = server.AcceptTcpClient();
 
Zuletzt bearbeitet:
Hallo eliasb!

Als aller erstes muss ich sagen das for( ; ; ) & while(true) Konstrukte absoluter Schwachsinn sind.
Auf solche Ideen kommen nur irgendwelche Berufsschullehrer. :rolleyes:

In folgendem Thread findest die Lösung für dein Problem und auch einen Link zu einem weiteren Thread,
in dem Du nützliche Links zu den Grundlagen des Threadings finden wirst.
[thread=210935]Thread Hilfe, wie beenden?[/thread]

Und das nächste mal bitte die Suchfunktion verwenden. ;) :)

MfG, cosmo
 
Vielen Dank, das Programm beendet nun die Threads mithilfe des WorkerThreads!


Als aller erstes muss ich sagen das for( ; ; ) & while(true) Konstrukte absoluter Schwachsinn sind.
Auf solche Ideen kommen nur irgendwelche Berufsschullehrer.

Welche Kontrollstrukturen sollte ich dann benutzen? *grübel*


Und das nächste mal bitte die Suchfunktion verwenden.

Ok, ich werde mich bemühen, in Zukunft die Suchfunktion zu benutzen, bevor ich eine Frage stelle :)


Vielen Dank für diese prompte Antwort!
 
eliasb hat gesagt.:
Welche Kontrollstrukturen sollte ich dann benutzen? *grübel*
while( BEDINGUNG )
Wobei die Bedingung von aussen her zugreifbar sein sollte,
damit man den Spaß auch wieder anhalten kann.
Man schießt sich sonst selber in den Fuß wenn das break, versteckt in irgend einer if-Abfrage rumliegt
und "aus irgend welchen Gründen" nicht verarbeitet wird.
Das break macht Sinn bei Blöcken,
deren restlicher Ablauf aufgrung einer Bedingung nicht mehr von Bedeutung ist.

Und for ist dafür da via Indexer auf ein Array oÄ zuzugreifen und nicht für einen immer wiederkehrenden Block.
In diesem Fall wurde es zweckentfremdet.

eliasb hat gesagt.:
Vielen Dank für diese prompte Antwort!
Hey, das kostet aber was... :rolleyes: :D :)

LG, cosmo
 
while( BEDINGUNG )
Wobei die Bedingung von aussen her zugreifbar sein sollte,
damit man den Spaß auch wieder anhalten kann.
Man schießt sich sonst selber in den Fuß wenn das break, versteckt in irgend einer if-Abfrage rumliegt
und "aus irgend welchen Gründen" nicht verarbeitet wird.
Das break macht Sinn bei Blöcken,
deren restlicher Ablauf aufgrung einer Bedingung nicht mehr von Bedeutung ist.

Jetzt ist es möglich, die while-Schleife zu verlassen (ohne break).
Somit macht der WorkerThread auch mehr Sinn.


Hey, das kostet aber was...

Ja, ja ...ich spendier' Dir gern mal was ... vorausgesetzt, Du zahlst :D
 
Zurück