Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在不同线程中运行和控制浏览器控件_C#_Webbrowser Control - Fatal编程技术网

C# 在不同线程中运行和控制浏览器控件

C# 在不同线程中运行和控制浏览器控件,c#,webbrowser-control,C#,Webbrowser Control,我有我的主gui类和一些子类。有+-3个线程从各种internet源和API网关等收集数据 现在,在这些线程中,我想运行一个webbrowser控件,这样我就可以在程序中添加一些自动浏览功能。每个子线程都应该能够自己打开webbrowser。因此,我创建了第二个c windows窗体,它只包含webbrowsing控件 我已经在webbrowser控件的这个新线程上使用了ApartmentState.STA设置。然而,form2没有响应 我试图调用应用程序。运行;从这个线程,这使webbrows

我有我的主gui类和一些子类。有+-3个线程从各种internet源和API网关等收集数据

现在,在这些线程中,我想运行一个webbrowser控件,这样我就可以在程序中添加一些自动浏览功能。每个子线程都应该能够自己打开webbrowser。因此,我创建了第二个c windows窗体,它只包含webbrowsing控件

我已经在webbrowser控件的这个新线程上使用了ApartmentState.STA设置。然而,form2没有响应

我试图调用应用程序。运行;从这个线程,这使webbrowser/form2响应。但是我的主线程停止运行

所以我有点不确定如何继续。我想要的一切可能吗?

这应该行得通

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吗?