private void button1_Click(object sender, EventArgs e) { if (server == null) { if (textBox1.Text == "") { MessageBox.Show("devi inserire una porta.", "Attenzione"); return; } int port = Convert.ToInt32(textBox1.Text); if (port < 1024 || port > 63000) { MessageBox.Show("Porta non valida.", "Attenzione"); return; } if (textBox2.Text == "") { MessageBox.Show("devi inserire una password.", "Attenzione"); return; } string password = textBox2.Text; clipb = new ClipboardSender(); // istanzio l'oggetto server , creato sulla porta e la password scelte dall'utente. server = new MyServer(); server.setpassw(password); server.setport(Convert.ToInt32(textBox1.Text)); server.form = this; server.clp = clipb; t = new Thread(new ThreadStart(server.StartListening)); // il thread t è quello che fa il run del server stesso t.IsBackground = true; // lo mettiamo in background altrimenti rimarrebbe bloccato sull'accept o cmq su un event. // è inutile ucciderlo! perchè tanto dato che resta bloccato su un evento se non gira in background da problemi. t.Name = "thread connessione"; t.Start(); } else { MessageBox.Show("server gia in uso", "Attenzione"); return; } }