C# 在新线程中创建Webbrowser并在窗体上绘制它

C# 在新线程中创建Webbrowser并在窗体上绘制它,c#,multithreading,winforms,webbrowser-control,C#,Multithreading,Winforms,Webbrowser Control,我正在使用以下代码在新线程中创建web浏览器控件: void Exec(string url) { var th = new Thread(() => { using (WebBrowser wb = new WebBrowser()) { wb.DocumentCompleted += (sndr, e) =>

我正在使用以下代码在新线程中创建web浏览器控件:

void Exec(string url)
        {
            var th = new Thread(() =>
            {
                using (WebBrowser wb = new WebBrowser())
                {
                    wb.DocumentCompleted += (sndr, e) =>
                    {
                        // Do something when completed
                        wb.Dispose();
                        Application.ExitThread();
                    };
                    wb.Navigate(url);
                    Application.Run();
                }
            });
            th.SetApartmentState(ApartmentState.STA);
            th.Start();
            th.Join();
        }
现在,每次调用此方法时,它都会创建web浏览器控件的新实例。
我的问题是,当创建新实例时,是否可以在窗体上绘制/重新绘制控件?

试试这个。不过可能会被优化

        void Exec(string url)
        {
            var th = new Thread(() =>
            {
                using (WebBrowser wb = new WebBrowser())
                {
                    wb.Name = "webBrowserGenerated" + Guid.NewGuid();
                    List<Control> list = new List<Control>();
                    GetAllControl(this, list);
                    foreach (Control control in list)
                    {
                        if (control.GetType() == typeof(WebBrowser))
                        {
                            if (control.Name.StartsWith("webBrowserGenerated"))
                            {
                                control.Refresh();
                            }
                        }
                    }
                    wb.DocumentCompleted += (sndr, e) =>
                    {
                        // Do something when completed
                        wb.Dispose();
                        Application.ExitThread();
                    };
                    wb.Navigate(url);
                    Application.Run();
                }
            });
            th.SetApartmentState(ApartmentState.STA);
            th.Start();
            th.Join();
        }

    private void GetAllControl(Control c, List<Control> list)
    {
        foreach (Control control in c.Controls)
        {
            list.Add(control);
            if (control.GetType() == typeof(Panel))
                GetAllControl(control, list);
        }
    }

这是WinForms还是Silverlight?我猜简单的答案是否定的。