C# 在不同线程中运行和控制浏览器控件
我有我的主gui类和一些子类。有+-3个线程从各种internet源和API网关等收集数据 现在,在这些线程中,我想运行一个webbrowser控件,这样我就可以在程序中添加一些自动浏览功能。每个子线程都应该能够自己打开webbrowser。因此,我创建了第二个c windows窗体,它只包含webbrowsing控件 我已经在webbrowser控件的这个新线程上使用了ApartmentState.STA设置。然而,form2没有响应 我试图调用应用程序。运行;从这个线程,这使webbrowser/form2响应。但是我的主线程停止运行 所以我有点不确定如何继续。我想要的一切可能吗?这应该行得通C# 在不同线程中运行和控制浏览器控件,c#,webbrowser-control,C#,Webbrowser Control,我有我的主gui类和一些子类。有+-3个线程从各种internet源和API网关等收集数据 现在,在这些线程中,我想运行一个webbrowser控件,这样我就可以在程序中添加一些自动浏览功能。每个子线程都应该能够自己打开webbrowser。因此,我创建了第二个c windows窗体,它只包含webbrowsing控件 我已经在webbrowser控件的这个新线程上使用了ApartmentState.STA设置。然而,form2没有响应 我试图调用应用程序。运行;从这个线程,这使webbrows
var th = new Thread(() =>
{
WebBrowserDocumentCompletedEventHandler completed = null;
using (WebBrowser wb = new WebBrowser())
{
completed = (sndr, e) =>
{
//Do Some work
wb.DocumentCompleted -= completed;
Application.ExitThread();
};
wb.DocumentCompleted += completed;
wb.Navigate(url);
Application.Run();
}
});
th.SetApartmentState(ApartmentState.STA);
th.Start();
th.Join();
也就是说,我将使用或与一起下载和解析html资源这应该是可行的
var th = new Thread(() =>
{
WebBrowserDocumentCompletedEventHandler completed = null;
using (WebBrowser wb = new WebBrowser())
{
completed = (sndr, e) =>
{
//Do Some work
wb.DocumentCompleted -= completed;
Application.ExitThread();
};
wb.DocumentCompleted += completed;
wb.Navigate(url);
Application.Run();
}
});
th.SetApartmentState(ApartmentState.STA);
th.Start();
th.Join();
也就是说,我将使用或与下载和解析html资源可能重复的“谢谢”。我试试这个。这不仅仅是下载内容,我还需要自动选择某些按钮并单击它们等。那么WebClient是否仍然可取?Selenium工作得很好。唯一的缺点是,您需要运行java服务器组件,并且有一些恼人的命令提示符窗口。。。但它是有效的:上面的答案也是有效的,但当我需要浏览到一个页面、输入数据、单击按钮、浏览到另一个页面、搜索数据等时,它会变得有点麻烦。那时,DComentCompleted事件让我头疼。你是上帝。花了一整天的时间在这上面。是否也可以用它来执行javascript?谢谢。我试试这个。这不仅仅是下载内容,我还需要自动选择某些按钮并单击它们等。那么WebClient是否仍然可取?Selenium工作得很好。唯一的缺点是,您需要运行java服务器组件,并且有一些恼人的命令提示符窗口。。。但它是有效的:上面的答案也是有效的,但当我需要浏览到一个页面、输入数据、单击按钮、浏览到另一个页面、搜索数据等时,它会变得有点麻烦。那时,DComentCompleted事件让我头疼。你是上帝。花了一整天的时间在这上面。有可能用它来执行javascript吗?