我相信WebBrowser控件是STA,NT服务中托管的WCF服务是MTA吗?谢谢.
对,这可能行不通.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();
}
Run Code Online (Sandbox Code Playgroud)
此外,来自过去经验的一个注释:我们已经看到System.Windows.Forms.WebBrowser不会导航的问题,除非它被添加到可视父级,例如Form.你的旅费可能会改变.祝好运!
归档时间: |
|
查看次数: |
1374 次 |
最近记录: |