muy buenas.
No pones donde y desde donde llamas al codigo, por lo que te esta pasando, seguramente lo estes llamando desde el evento:
private void Form1_Load(object sender, EventArgs e)
{ ... }
o incluso desde el constructor:
public Form1()
{
InitializeComponent();
}
A mi me paso lo mismo no hace mucho, llamaba dede el evento load, y hasta que este termina de ejecutar no me aparecia el Form.
Lo primero que hice fue poner un boton i lanzar el codigo manualmende desde el.... pero no convencia mucho.
Al final ya desesperado probando mil cosas opté por enchufarle un timer.
El timer lo programo a 250 (ponerlo como te guste mas) y puse algo asi:
//Se lanza al abrir el form
private void Actualizar_Load(object sender, EventArgs e)
{
timer1.Start(); //enciendo el timer
}
//botón para volver a comprovar
private void button1_Click(object sender, EventArgs e)
{
lanzar();
}
//timer a 250ms
private void timer1_Tick(object sender, EventArgs e)
{
timer1.Stop(); //apago el timer, ya no lo quiero mas
lanzar();
}
private void lanzar()
{
//codigo que quiero se lance
}
No se si es muy profesional pero funciona
Otra cosa, al final de tu bucle foreach (dentro de el) yo pondria la linea:
Application.DoEvents();
incluso tambien lo pondria despues de pantalla.Text+="..."; sobre todo si prueba.send(...) tiene un poco de retraso
Este procesa todos los mensajes de win que tenga en cola (hace un refresco)
Te lo pongo porque muchas veces el texbox no se rellena hasta que ha acabado todo el proceso, con el DoEvents lograras que el mensaje se vaya actualizando
Espero te sirva. un saludo