Con questo codice:

codice:
// Controllo tramite tastiera
        private void backgroundWorker2_DoWork(object sender, DoWorkEventArgs e)
        {
            while (connesso == true)
            {
                if (controlloTastiera == true)
                {
                    
                    // Rilevazione dello stato della tastiera
                    
                    // Nessun tasto direzionale premuto
                    if ((!Microsoft.Xna.Framework.Input.Keyboard.GetState(PlayerIndex.One).IsKeyDown(Microsoft.Xna.Framework.Input.Keys.Up)) && (!Microsoft.Xna.Framework.Input.Keyboard.GetState(PlayerIndex.One).IsKeyDown(Microsoft.Xna.Framework.Input.Keys.Down)) && (!Microsoft.Xna.Framework.Input.Keyboard.GetState(PlayerIndex.One).IsKeyDown(Microsoft.Xna.Framework.Input.Keys.Left)) && (!Microsoft.Xna.Framework.Input.Keyboard.GetState(PlayerIndex.One).IsKeyDown(Microsoft.Xna.Framework.Input.Keys.Right)))
                    {
                        portaSeriale.Write("f");
                        //MessageBox.Show("Non premuto");        
                    }
                    
                    // Freccia giù
                    if (Microsoft.Xna.Framework.Input.Keyboard.GetState(PlayerIndex.One).IsKeyDown(Microsoft.Xna.Framework.Input.Keys.Down))
                    {
                        portaSeriale.Write("i");
                        MessageBox.Show("GIU");
                    }

                    // Freccia su
                    if (Microsoft.Xna.Framework.Input.Keyboard.GetState(PlayerIndex.One).IsKeyDown(Microsoft.Xna.Framework.Input.Keys.Up))
                    {
                        portaSeriale.Write("a");
                        MessageBox.Show("SU");
                    }

                    // Freccia sinistra
                    if (Microsoft.Xna.Framework.Input.Keyboard.GetState(PlayerIndex.One).IsKeyDown(Microsoft.Xna.Framework.Input.Keys.Left))
                    {
                        portaSeriale.Write("s");
                        MessageBox.Show("SINISTRA");
                    }

                    // Freccia destra
                    if (Microsoft.Xna.Framework.Input.Keyboard.GetState(PlayerIndex.One).IsKeyDown(Microsoft.Xna.Framework.Input.Keys.Right))
                    {
                        portaSeriale.Write("d");
                        MessageBox.Show("DESTRA");
                    }
                }
            }
        }
quando avvio il controllo da tastiera, se non premo nulla, compare la MessageBox che inidica che nessun tasto è stato premuto, poi premi un tasto freccia, clicco su Ok della MessageBox e il controllo funziona dandomi il messaggio del tasto premuto.

Se non passo dal primo controllo (quello su nessun tasto direzionale premuto) o non metto al suo interno una istruzione bloccante come la MessageBox, premendo i tasti direzionali non avviene nulla, come se non venissero controllati.

Non capisco dove si trovi l'errore.