C# 在新线程中创建Webbrowser并在窗体上绘制它
我正在使用以下代码在新线程中创建web浏览器控件: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) =>
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?我猜简单的答案是否定的。