我相信WebBrowser控件是STA,NT服务中托管的WCF服务是MTA吗? 感谢。
答案 0 :(得分:6)
是的,这可能行不通。 WebBrowser控件旨在由单个STA线程使用。它不能很好地映射到Web服务中的MTA,并且可能需要一些主要的hackery。
你想做什么?如果您可以描述您的问题,我们可能会提出替代解决方案。
修改的
好的,这可能是可能的,虽然肯定是hacky。这是一个理论实现:
代码看起来像这样:
public Bitmap GiveMeScreenshot()
{
var waiter = new ManualResetEvent();
Bitmap screenshot = null;
// Spin up an STA thread to do the web browser work:
var staThread = new Thread(() =>
{
var browser = new WebBrowser();
browser.DocumentCompleted += (sender, e) =>
{
screenshot = TakeScreenshotOfLoadedWebpage(browser);
waiter.Set(); // Signal the web service thread we're done.
}
browser.Navigate("http://www.google.com");
};
staThread.SetApartmentState(ApartmentState.STA);
staThread.Start();
var timeout = TimeSpan.FromSeconds(30);
waiter.WaitOne(timeout); // Wait for the STA thread to finish.
return screenshot;
};
private Bitmap TakeScreenshotOfLoadedWebpage(WebBrowser browser)
{
// TakeScreenshot() doesn't exist. But you can do this using the DrawToDC method:
// http://msdn.microsoft.com/en-us/library/aa752273(VS.85).aspx
return browser.TakeScreenshot();
}
此外,根据过去的经验记录:我们已经看到System.Windows.Forms.WebBrowser不会导航的问题,除非它被添加到可视父级,例如表单。你的旅费可能会改变。祝你好运!