Why Form freezes when using BackgroundWorker in C#? : I am new to C# and I am using windows forms

I have a problem with doing some work in  BackgroundWorker.

I have 2 forms (`Form1` and `Form2`) and 3 `User Controls` `UC1`, `UC2` and `UC3`.

`Form1` has only one `button` which shows `Form2` which you click on it.

`Form2` has 4 `buttons` (`Btn_ShowUC1`, `Btn_ShowUC2`, `Btn_ShowUC3` and `Button_Close`) and 3 `BackgroundWorkers`.

What I am trying to do is: when I click on `button1` in `Form1`, `Form2` show up and then I want to show the relevant `User control` and hide the rest when I click on any button in `Form2`. For example: click on `Btn_ShowUC1` `user control1` shows up and hide the rest,  click on `Btn_ShowUC2` `user control2` shows up and hide the rest and so on. Now showing and hiding the `user controls` in UI sometimes cuases `Form2` to freeze therefore I used BackgroundWorkers to Show/Hide `user control` process. 

I am using 3 `BackgroundWorkers` for each relavant button in case one `BackgroundWorker` is busy to do the show/hide processs.

In Form1:


        Form2 f2 = new Form2();
       
        private void button1_Click(object sender, EventArgs e)
        {
            f2.ShowDialog();
        }

In Form2:

        UserControl CurrentUserControl;
        UserControl1 uc1 = new UserControl1();
        UserControl2 uc2 = new UserControl2();
        UserControl3 uc3 = new UserControl3();

        public Form2()
        {
            InitializeComponent();
            Controls.Add(uc1);
            Controls.Add(uc2);
            Controls.Add(uc3);

        }

      private void Form2_Load(object sender, EventArgs e)
        {
           
            foreach (Control ctrl in this.Controls)
            {
                if (ctrl is UserControl)
                {
                    ctrl.Visible = false;
                }
            }
            uc1.Visible = true;
        }


       private void Btn_ShowUC1_Click(object sender, EventArgs e)
        {
            CurrentUserControl = uc1;
            backgroundWorker1.RunWorkerAsync();

        }
        private void Btn_ShowUC2_Click(object sender, EventArgs e)
        {
            CurrentUserControl = uc2;
            backgroundWorker2.RunWorkerAsync();
        }

        private void Btn_ShowUC3_Click(object sender, EventArgs e)
        {
            CurrentUserControl = uc3;         
            backgroundWorker3.RunWorkerAsync();
        }

      private void Button_Close_Click(object sender, EventArgs e)
        {
           close();
        }

      private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
        {
            foreach (Control ctrl in this.Controls)
            {
                if (ctrl is UserControl)
                {
                    ctrl.Visible = false;
                }
            }
            CurrentUserControl.Visible = true;
        }

      private void backgroundWorker2_DoWork(object sender, DoWorkEventArgs e)
        {
            foreach (Control ctrl in this.Controls)
            {
                if (ctrl is UserControl)
                {
                    ctrl.Visible = false;
                }
            }
            CurrentUserControl.Visible = true;
        }

     private void backgroundWorker3_DoWork(object sender, DoWorkEventArgs e)
        {
            foreach (Control ctrl in this.Controls)
            {
                if (ctrl is UserControl)
                {
                    ctrl.Visible = false;
                }
            }
            CurrentUserControl.Visible = true;
        }

When `Form2` loads `usercontrol1` shows up and when I click any any button the relevant user control shows up and every thing works well. However, When I close `form2` and open it again and click on any button none of the `user controls` show up and `Form2` freezes and it throws error saying "This backGroundWorker is currently busy and can not run multiple tasks concurrently" 
Why I am having this error? I mean I am using 3 different `backGroundWorkers`.

Note this is all the code I have in the project.

Anyone knows how can I fix it? I mean I want to show/hide the user controls in separate thread when I click on any button without freezing the form.
I will be very happy to hear any different ideas. 
Thank you