Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/315.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.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#_.net_Events_Webbrowser Control - Fatal编程技术网

C#WebBrowser在不同线程中重用

C#WebBrowser在不同线程中重用,c#,.net,events,webbrowser-control,C#,.net,Events,Webbrowser Control,我有一个WebBrowser控件,我告诉它导航到几个网页。对于一个导航,我下面的代码运行良好。当执行代码段2时,我得到的COM对象已与其底层RCW分离,因此无法使用。error。我假设这是因为我的web浏览器正在被处理或者有线程,但这是一个全局变量!我应该可以重复使用它!所以我只想访问几个网页并保留状态,我需要使用WebBrowser类 //browser is a global browser = new WebBrowser(); browser.DocumentCompleted +=

我有一个WebBrowser控件,我告诉它导航到几个网页。对于一个导航,我下面的代码运行良好。当执行代码段2时,我得到的
COM对象已与其底层RCW分离,因此无法使用。
error。我假设这是因为我的web浏览器正在被处理或者有线程,但这是一个全局变量!我应该可以重复使用它!所以我只想访问几个网页并保留状态,我需要使用WebBrowser类

//browser is a global 
browser = new WebBrowser();
browser.DocumentCompleted += browser_DocumentCompleted;

// code piece 1
Thread t = new Thread(() =>
{
   browser.Navigate(MAIN_URI);
   Application.Run();
});
t.SetApartmentState(ApartmentState.STA);
t.Start();
t.Join();

// code piece 2
Thread t = new Thread(() =>
{
   browser.Navigate(DIFFERENT_URI);
   Application.Run();
});
t.SetApartmentState(ApartmentState.STA);
t.Start();
t.Join();

// code piece 3
private static void browser_DocumentCompleted(object sender, WebBrowserDocumentCompletedArgs args)
{
   // getting document data and stuff  
   Application.Exit();
}

当您
在生成线程上没有任何其他活动的情况下立即加入它们时,为什么首先生成这些线程?@spender这些只是相关的代码片段。还有很多事情要做。我很惊讶它甚至可以用于单个导航
WebBrowser
对象是WebBrowser ActiveX控件的包装器,需要在同一个STA线程上创建、访问和销毁该控件。也许,您可以从这里借用一些代码:@Noseratio我在调用包含上述代码段的代码的方法上方有[STA-Thread]。这很奇怪,它需要在同一个线程中,因为documentCompleted事件甚至不会触发,如果我没有像上面那样导航到一个新线程中。。。这就是为什么我必须先开始然后加入,因为我不关心并行性。链接看起来也很有用,但我需要使用相同的浏览器对象进行导航以保存状态。。。