c# 如何关闭主窗体中用ShowDialog打开的子窗体

c# 怎么关闭主窗体中用ShowDialog打开的子窗体?
我的需求如下图:
c# 如何关闭主窗体中用ShowDialog打开的子窗体
我在主窗体中用ShowDialog打开如红框中所示的ProcessBox,然后我想开启一个线程来关闭这个ProcessBox.(类似于等待数据的一个过程)
问题:我在线程中用Close()关闭ProcessBox时报错"执行 CreateHandle() 时无法调用值 Close()"
我的代码如下:
我自定义了一个ProcessBox控件,代码如下:

namespace NewProcessBox
{
    public partial class ProcessBox : Form
    {

        public ProcessBox(bool isAActive, int InnerCircleRadius, int OuterCircleRadius)
        {
            InitializeComponent();
            loadingCircle.Active = true;//loadingCircle就是中间那个不停转的东西,不用管,这是我调用别人的dll生成的
            loadingCircle.InnerCircleRadius = 15;//我调用别人的dll设置loadingCircle的内圆半径,不用管
            loadingCircle.OuterCircleRadius = 10;//我调用别人的dll设置loadingCircle的内圆半径,不用管
        }
        private static ProcessBox processBox = new ProcessBox(true,15,10);


        public void SetText(string text)
        {
            label.Text=text;
        }

        public static ProcessBox getProcessBox()
        {
            if (processBox == null || processBox.IsDisposed)
                processBox = new ProcessBox(true, 15, 10);
            return processBox;
        }
    }
}

主窗体代码如下:

namespace demo
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
      
        private void button1_Click(object sender, EventArgs e)
        {
            
           //想通过委托的异步调用来关闭ProcessBox
            CrossThreadControl hander = new CrossThreadControl(ThreadControl);
            hander.BeginInvoke(new AsyncCallback(writeComplete), null);
            ProcessBox.getProcessBox().ShowDialog();//点击button1后开启ProcessBox
           
           
        }

        private void writeComplete(IAsyncResult reslut)
        {
            CrossThreadControl handler = (CrossThreadControl)((AsyncResult)reslut).AsyncDelegate;
            handler.EndInvoke(reslut);//执行到此处报错!
        }

        public void ThreadControl()
        {
            
            //....数据查询过程代码....
                
            ProcessBox.getProcessBox().Close();
        }

        private delegate void CrossThreadControl();

    }
}

请问如何解决这个问题
------解决方案--------------------
ProcessBox在ui线程打开也要在ui线程关闭

        public void ThreadControl()         {
            this.BeginInvoke(new EventHandler(delegate
            {
                ProcessBox.getProcessBox().Close();