Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/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# 如何在webBrowser文档上完成多线程?_C#_Multithreading - Fatal编程技术网

C# 如何在webBrowser文档上完成多线程?

C# 如何在webBrowser文档上完成多线程?,c#,multithreading,C#,Multithreading,见上文。 我的问题是,如何使它们同时运行(使两个线程手动控制对它们的监视),现在的问题是它们都在主线程上单独运行,我不能执行其他任务,谢谢您的帮助!对不起,英语不好 我试着使用,例如: private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e) { //list of tasks } private void webBrowser2_DocumentCompl

见上文。 我的问题是,如何使它们同时运行(使两个线程手动控制对它们的监视),现在的问题是它们都在主线程上单独运行,我不能执行其他任务,谢谢您的帮助!对不起,英语不好

我试着使用,例如:

private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
//list of tasks
}

private void webBrowser2_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
//list of tasks
}
但那就是使用线程来导航,一旦导航完成,系统就会单独运行完成的文档。 我不知道如何控制它们,谢谢你的帮助

我已经将任务包装在一个函数中,现在问题是 当我这样做的时候,它不起作用

    Thread threadw1 = new Thread(() => webBrowser1.Navigate("url1"));
    Thread threadw2 = new Thread(() => webBrowser2.Navigate("url2"));
    threadw1.Start();
    threadw2.Start(); 

将要运行的任务放入
DocumentCompleted
事件的处理程序中。我用了一根线,因为你提到了它。我建议使用
ThreadPool
Task

wbb1.SetApartmentState(ApartmentState.STA);

我曾尝试创建一个线程来处理它,但该函数在页面完全加载后自动调用,我不知道如何手动触发或监视它们。我建议您在DocumentCompleted函数中创建线程,并让这些线程调用函数来执行任务列表(如果它们不是GUI任务)只有在另一个线程上创建WebBrowser对象时,才可能执行此操作。特殊螺纹,必须符合STA合同要求。涵盖内容:将它们包装在函数中,然后创建一个线程来运行它可能是一种有效的方法,我想我会尝试一下如果页面在线程中的代码运行时导航离开,就会发生这种情况。你确定你要保持在同一页上吗?我不明白:你想对文档完成后立即更改的页面做什么。哦,不,事实上,它仍然在同一页上,现在我很困惑,因为我已经编辑了上面的内容,我只使用了一个线程来包装它们,太奇怪了,我认为线程试图在页面加载wbb1.SetApartmentState(ApartmentState.STA)之前运行,这解决了问题
 private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
        {
            if (webBrowser1.ReadyState < WebBrowserReadyState.Complete) return;

                // Do the work, you have the event args in ev


            //Thread wbb1 = new Thread(() => wb1task());
           // wbb1.Start();
            wb1task();
        }
wbb1.SetApartmentState(ApartmentState.STA);
private void webBrowser1_DocumentCompleted(object sender, 
        WebBrowserDocumentCompletedEventArgs e)
{
    new Thread((state) => {
        WebBrowserDocumentCompletedEventArgs ev = 
                (WebBrowserDocumentCompletedEventArgs) state;
        // Do the work, you have the event args in ev

    }) {Name = "Thread for webBrowser1"}.Start(e);
}