Permalänk
Medlem

C# process/tråd i bakgrunden

Jag är ny på C# och sitter och labbar lite för att lära mig.

Det jag vill, är att starta en TcpListener i bakgrunden genom ett knapptryck i en formapplication, så att jag fortfarande kan trycka på knappar etc, i mitt UI.
I dag så slutar UI't svara när jag startar den.

Jag har använt mig utav MSDN's exempel enligt denna länk.

Stämmer det att jag måste implementera Threads?
Hur som helst, så har jag kört fast och önskar lite hjälp på vägen.

Visa signatur

- none -

Permalänk
Medlem

Självklart kan du köra din tcp listener i en tråd. Men det bör inte behövas. Jag har oftast gjort detta i C++, men google efter "non blocking TcpListner C#" eller något så skall du nog hitta. Jag gissar att du kan sätta din TcpListner "non blocking". Då "väntar" inte exekveringen där utan kör vidare (och ditt UI kommer fortsätta svara). Sedan får du nog ange en callback funktion som skall köras när väl din TcpListner får något att göra. Beroende på vad man skall gör kan man då tex skapa en tråd för vidare kommunikation med varje ansluten klient.

Visa signatur

Gigabyte Aorus Master | 32gb DDR4 3466MHZ CL14 | Ryzen 3950X | 3080Ti
En lång rad Intel system som barnen fått som speldatorer, VR-dator, massa bärbara, servrar, RPi's och andra boxar :P

Permalänk
Medlem

Det lättaste ( i mitt tycke) är att använda trådar.
Ex:

Thread myServerThread = new Thread(new ThreadStart(ServerThread)); myServerThread.Start(); private void ServerThread() { /*snip*/ try { tcpListener = new TcpListener(ipAddress, settings.TCPPort); } catch (Exception e) { Console.WriteLine(e.ToString()); } // Starta uppkoppling tcpListener.Start(); // Avvakta tills en client har kopplat upp sig socketForClient = tcpListener.AcceptSocket(); /* Gör något med socketen. */ }

I server tråden implementerar du lyssnaren och sen får du signalera när du får en klient om du inte vill fortsätta behandla den i en egen tråd.