controlling c# game using arduino buttons

hi, i managed to make the next form appear using a background worker, now my problem is that the next form freezes while loading. also the event from the previous form is still in effect in the succeeding forms, for example in the first form i set up 'd' to exit the program, in the next form i set it up to function as down key, but it still functions as exit. am i using the background worker incorrectly.

Form2 nform;
        SerialPort port;
        char input1;
        BackgroundWorker back;
            
        public Form1()
        {
            InitializeComponent();
            back = new BackgroundWorker();
            back.WorkerReportsProgress = true;
            back.DoWork += new DoWorkEventHandler(back_DoWork);
            back.ProgressChanged += new ProgressChangedEventHandler(back_ProgressChanged);
            back.RunWorkerCompleted += new   RunWorkerCompletedEventHandler(back_RunWorkerCompleted);
            input1 = '\0';
            port = new SerialPort("COM3", 9600, Parity.None, 8, StopBits.One);
            port.WriteTimeout = 500;
            try
            {
                if (port.IsOpen)            //if port is open
                {
                    port.Close();
                    port.Open();
                }
                else
                    port.Open();
                if (!this.back.IsBusy)
                {
                    this.back.RunWorkerAsync(360000);
                }
            }
            catch
            {
                Debug.WriteLine("The port cannot be opened!");
            }
        }

        void back_DoWork(object sender, DoWorkEventArgs e)
        {
            while (true)
            {
                try
                {
                    //read the input
                    input1 = (char)port.ReadChar();
                    if (input1 == 'e')
                    {
                        nform = new Form2();
                        nform.Show();
                        this.Hide();
                    }
                    else if (input1 == 'x')
                    {
                        Application.exit();
                    }
                }
                catch
                {
                }
            }
        }
        void back_ProgressChanged(object sender, ProgressChangedEventArgs e)
        {}
        void back_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
        {}