我有以下代码:
private void startBtn_Click(object sender, EventArgs e)
{
Thread mainThread = new Thread(core);
mainThread.Start("http://wikipedia.org");
}
private void core(object url)
{
Exec((string)url);
}
void Exec(string url)
{
var th = new Thread(() =>
{
using (WebBrowser wb = new WebBrowser())
{
wb.Dock = DockStyle.Fill;
browserPanel.Invoke((MethodInvoker)delegate { browserPanel.Controls.Add(wb); });
browserPanel.Invoke((MethodInvoker)delegate { browserPanel.Refresh(); });
wb.ScriptErrorsSuppressed = true;
wb.DocumentCompleted += (sndr, e) =>
{
if (e.Url.AbsolutePath != (sndr as WebBrowser).Url.AbsolutePath)
return;
Console.WriteLine(wb.DocumentTitle);
// Close the current instance of the WB control and exit the current thread
wb.Dispose();
Application.ExitThread();
Console.WriteLine("Closed!");
};
wb.Navigate(url);
Application.Run();
}
});
th.SetApartmentState(ApartmentState.STA);
th.Name = "Browser thread";
th.Start();
th.Join();
}
我尝试做的是在每次执行后杀死线程并创建新线程(使用浏览器控件的新实例),但表单正在消失。 Visual Studio使程序保持运行,但表单已经消失。
问题在于我将浏览器添加到面板中,以便我可以看到正在发生的事情。我发现这些线条使形式消失。
wb.Dock = DockStyle.Fill;
browserPanel.Invoke((MethodInvoker)delegate { browserPanel.Controls.Add(wb); });
browserPanel.Invoke((MethodInvoker)delegate { browserPanel.Refresh(); });
如果我删除/注释这些行,一切都按预期工作。有没有办法保持浏览器"画"在窗体(面板)上仍然退出线程?