Ich versuche, eine Winform-App zu machen, die auf eine TCP-Verbindung wartet, und dann X, wenn sie eine Verbindung erhält.TcpListener stürzt meine Windows Form App ab
Das Problem, das ich habe, ist, dass, wenn es beginnt die App in „nicht reagiert“
Dies ist der Code Ich verwende geht hören:
try
{
// set the TcpListener on port 13000
int port = 13000;
TcpListener server = new TcpListener(IPAddress.Any, port);
// Start listening for client requests
server.Start();
//Enter the listening loop
while (true)
{
MessageBox.Show(@"Waiting for a connection... ");
server.AcceptTcpClient();
MessageBox.Show(@"Connected");
// ProcessStartInfo proc = new ProcessStartInfo();
// proc.WindowStyle = ProcessWindowStyle.Hidden;
// proc.FileName = "cmd";
// proc.Arguments = "/C shutdown -f -r";
// Process.Start(proc);
}
}
catch (SocketException)
{
MessageBox.Show(@"SocketException");
}
Das Merkwürdige ist, ist es funktioniert gut als eine Konsolen-App.
Irgendwelche Ideen, was ich falsch mache?
accept() - Blöcke. Sie können in einem GUI-Ereignishandler nicht blockieren. Fädeln Sie es ab. – ThingyWotsit
Ein Formularprojekt benötigt keine while-Schleife. Die while-Schleife wird Block genannt und verhindert, dass die Konsolenanwendung beendet wird. Ein Formularprojekt enthält einen in den Konstruktor integrierten Block und benötigt keinen zusätzlichen Block in Ihrem Code. – jdweng
So kann ich nur entfernen, während wahr, und es wird in Ordnung laufen? –