我可以看到这是一个简单的修正,但它让我难过.
这是我得到的错误
COMException未处理
错误HRESULT E_FAIL已从调用COM组件返回.
这是代码(我已经删除了URL,但它们是有效的)
class SMSHandler
{
private InternetExplorer ie;
private object URL = "##########";
private object URL2 = "###########";
public SMSHandler()
{
ie = new InternetExplorer();
ie.Visible = true;
}
public void openMACS()
{
object Empty = 0;
ie.Navigate2(ref URL, ref Empty, ref Empty, ref Empty, ref Empty);
while (ie.Busy);
ie.Navigate2(ref URL2, ref Empty, ref Empty, ref Empty, ref Empty);
IHTMLDocument2 HTMLDoc = (IHTMLDocument2)ie.Document;
}
Run Code Online (Sandbox Code Playgroud)
这是产生错误的行
IHTMLDocument2 HTMLDoc = (IHTMLDocument2)ie.Document;
Run Code Online (Sandbox Code Playgroud)
网页打开正常,但是当我尝试将文档分配给IHTMLDocument2时,它失败了.
任何帮助都会很棒
您忘记等待页面加载完成.一会儿(即.Busy); 循环非常难看,你不想在等待IE完成时刻录100%的核心.请改用DocumentComplete事件.还有一台状态机可以跟踪您的位置.像这样的东西:
private int state = 0;
public SMSHandler()
{
ie = new InternetExplorer();
ie.DocumentComplete += ie_DocumentComplete;
ie.Visible = true;
}
void ie_DocumentComplete(object pDisp, ref object URL) {
object Empty = 0;
if (state == 1) {
ie.Navigate2(ref URL2, ref Empty, ref Empty, ref Empty, ref Empty);
state++;
}
else if (state == 2) {
IHTMLDocument2 HTMLDoc = (IHTMLDocument2)ie.Document;
// etc..
state = 0;
}
}
public void openMACS()
{
object Empty = 0;
state = 1;
ie.Navigate2(ref URL, ref Empty, ref Empty, ref Empty, ref Empty);
}
Run Code Online (Sandbox Code Playgroud)
考虑使用WebBrowser类,因此您不必在进程外运行IE. 这个答案向您展示了如何在一个单独的线程中运行它.这是您在代码中获得E_FAIL的一个非常可能的原因.
| 归档时间: |
|
| 查看次数: |
5908 次 |
| 最近记录: |