2012-10-05 44 views
0

我有这段代码需要检索iframe的文档对象并将其保存在一个对象中。通过C获取iframe文档对象#

//just a wrapper object to store the document object 
DocObj obj = new DocObj(HtmlDoc); 

ManualResetEvent aDoneEvents = new ManualResetEvent(false); 
string errorMessage = ""; 
Thread aThread = new Thread(() => 
{ 
    try 
    { 
     //finding the iframe element in the current document 
     IHTMLElement IElem = LocatorBuilder.GetLocator(Target) 
        .Find(this.HTMLDoc); 

     obj.HTMLDoc = (IElem as HTMLIFrame).document as HTMLDocument; 

    } 
    catch (Exception e) 
    { 
     errorMessage = e.Message; 
    } 
    aDoneEvents.Set(); 
}); 

aThread.SetApartmentState(ApartmentState.STA); 
aThread.IsBackground = true; 
aThread.Start(); 
aDoneEvents.WaitOne(); 
if (errorMessage != "") 
{ 
    throw new Exception(errorMessage); 
} 
HtmlDoc = obj.HTMLDoc; 

但是当我尝试检索新的文档对象,我得到的最后一行此异常:禁用的,因为以前的功能评价 超时

功能评价。你必须继续执行,以重新启用功能评价

+0

是你的地方设置断点和调试呢? –

+0

不应该aDoneEvents.WaitOne();在调用aDoneEvents.Set();之前被调用? (来自线程的noob) –

+0

您使用的是什么版本的.NET? – casperOne

回答

0
mshtml.IHTMLDocument3 doc3 = (mshtml.IHTMLDocument3)webBrowser.Document.DomDocument; 
mshtml.IHTMLFrameBase2 frame = (mshtml.IHTMLFrameBase2)doc3.getElementById("iframe_name"); 
if (frame != null) 
{ 
    mshtml.IHTMLWindow2 w2 = (mshtml.IHTMLWindow2)frame.contentWindow; 
    doc3 = (mshtml.IHTMLDocument3)w2.document; 
} 
+0

请添加一些文字说明 – Mysterion