Ecrire dans un textBox depuis un autre thread / appel Thread-safe dans un Windows Form

Lorsqu’on appelle une méthode qui écrit dans un textBox (par exemple) sur une Form, et qu’on l’appelle depuis un autre thread, une autre classe, une erreur est retournée. Ce n’est pas « thread-safe« .

Pour contrer cela, il faut utiliser invoke. Par exemple si dans la class de ma Form, j’ai une méthode qui écrit dans une textBox :

public void log(string value)
    {
    if (InvokeRequired)
        {
            this.Invoke(new Action<string>(log), new object[] { value });
            return;
        }
        Console.WriteLine("LOG : " + value);
        textBox_log.Text += value + "\r\n";
    }

 

 

C# : Socket ou TcpListener / TcpClient ?

Les 2 classes ont un objectif similaire et utilisent les mêmes méthodes : faire communiquer 2 éléments. Voici la différence entre Socket et TcpListener/TcpClient.

TCPListener est une classe dérivée de Socket, qui se concentre uniquement sur le protocole TCP.

Socket permet d’utiliser des protocoles TCP, mais aussi d’autres comme UDP et permet une configuration plus précise.

La différence n’est pas énorme en terme de lignes de codes. Mais si tu ne connais pas trop encore les Socket et les détails des protocoles, utilise TCPListener et TcpClient, qui sont une version épurée et plus simple de Socket.

Si tu sais ce que tu fais et/ou que tu veux un autre protocole que Tcp, utilise les Socket.