多线程操里操作webbrowser的 Frames

多线程操里操作webbrowser的 Frames
有这样一个函数,直接在窗体中运行正常,但放到线程里一到frames就报错

procedure TForm1.fillframese1(webbrowser:TWebBrowser;params:TStrings;frameindex:integer);
var
  Tabi:Integer;
  doc:IHTMLDocument2;
  Collection:IHTMLElementCollection;
  Element:IHTMLElement;
  frames:IDispatch;
  framew:IHTMLWindow2;
  i:OleVariant;
  s:string;
  ii,divi:Integer;
  input:IHTMLInputElement;
  docii:HTMLDocument;
  iframe:IWebBrowser;
begin
  try
    doc:=Webbrowser.document as IHTMLDocument2;
    i:=6;
    doc.all ;
    frames:=doc.frames.item(i);
    framew:=frames as IHTMLWindow2;
    docii:=framew.document as HTMLDocument;
    collection:=docii.all.tags(‘iframe‘) as IHTMLElementCollection;
    //ShowMessage(IntToStr(Collection.length));
    for ii:= 0 to collection.length -1 do
    begin
      iframe:= Collection.item(ii,varEmpty) as IWebBrowser; //在网上查过不少文章,最后自己尝试成功,关键就是这里。
      doc:=iframe.document as IHTMLDocument2;
      Element:=doc.body as IHTMLElement;

    end;
     //总结:获取Webbrowser的iframe的内容,需要把iframe元索强制转换为iwebbrowser接口,
     //之后,还要强制转换为ihtmlelement接口才可以成功访问iframe里面的元素,否则程序运行出错;
  except
  on e:exception do
    begin
      showmessage(‘fillframese1: ‘+params.Names[i]+‘ :‘+e.Message);
    end;
  end;
end;

线程外正常,但放到IdTCPServer.Execute里调用,执行到这句就报错frames:=doc.frames.item(i);
并且已经加上  CoInitialize(nil); OleInitialize(nil);
不知道大家有没有遇到过,有什么解决方法?

多线程操里操作webbrowser的 Frames,布布扣,bubuko.com

时间: 2024-12-21 02:45:34

多线程操里操作webbrowser的 Frames的相关文章

多线程程序中操作的原子性

[转]http://www.parallellabs.com/2010/04/15/atomic-operation-in-multithreaded-application/ 多线程程序中操作的原子性 0. 背景 原子操作就 是不可再分的操作.在多线程程序中原子操作是一个非常重要的概念,它常常用来实现一些同步机制,同时也是一些常见的多线程Bug的源头.本文主要讨论了三 个问题:1. 多线程程序中对变量的读写操作是否是原子的?2. 多线程程序中对Bit field(位域)的读写操作是否是线程安全

Winform软件,不要在线程里操作UI

对于Winform软件,不要在线程里操作UI,不要相信:StartForm.CheckForIllegalCrossThreadCalls = false; 于是,把所有的代码都改成主线程委托调用的方式 private delegate void SetTextHandle(string id, string value); private void ThreadSetText(string id, string value) { this.Controls.Find(id, true)[0].

C#中利用委托实现多线程跨线程操作

在使用VS2005的时候,如果你从非创建这个控件的线程中访问这个控件或者操作这个控件的话就会抛出这个异常.这是微软为了保证线程安全以及提高代码的效率所做的改进,但是也给大家带来很多不便. 其实解决这个问题有两种方法:一,是通过设置System.Windows.Forms.Control.CheckForIllegalCrossThreadCalls = false;在你的程序初始化的时候设置了这个属性,而且在你的控件中使用的都是微软Framework类库中的控件的话,系统就不会再抛出你上面所说的

【笨木头Unity】入门之旅009:Demo之四处找死(四)_在代码里操作物体

有没有发现越往后写,旁白出现的次数越少? 是的,最近公司出了点小问题,思绪就变得沉重了一些,思绪一沉重,我的精神分裂就很难发作. 不唠叨了,这次我们来试试在代码里操作物体吧,很简单很简单的. 笨木头花心贡献,啥?花心?不,是用心. 转载请注明,原文地址:http://www.benmutou.com/archives/2176 文章来源:笨木头与游戏开发 1.找遍全世界,只为了发现你--FindGameObjectWithTag 还记得很早之前我们介绍的Tag吗?我知道你们肯定不记得的. 先给我

内核里操作进程

 在内核里操作进程 在内核里操作进程,相信是很多对 WINDOWS 内核编程感兴趣的朋友第一个学习的知识点.但在这里,我要让大家失望了,在内核里操作进程没什么特别的,就标准方法而言,还是调用那几个和进程相关的 NATIVE API 而已(当然了,本文所说的进程操作,还包括对线程和 DLL 模块的操作).本文包括 10 个部分:分别是:枚举进程.暂停进程.恢复进程.结束进程.枚举线程.暂停线程.恢复线程.结束线程.枚举 DLL 模块.卸载 DLL 模块. 1.枚举进程.进程就是活动起来的程序.每一

vue里操作DOM

一般来说你要在vue里操作DOM,要先在标签里加上ref="",如下: <h2 ref="s" @click="sss">Essential Links</h2> 然后在点击的事件sss写下你想要的效果代码:(注意的是上面的ref的s,要写在下面this.$refs,不要忘了) methods: { sss() { this.$refs.s.style.color = "blue"; } } 如果你想要

透过DOM操作WebBrowser内的控件

如果在Win Form的WebBrowser要去控制内含的网页上的控件, 要怎处理呢? 可以透过下列方式: 1. 首先,我们在Win Form上设定WebBrowser的URL - http://yzcomm.googlepages.com/h004.html (找一个简单的网页) 2. 然后,我们希望去调整网页下拉菜单的选项. 3. 我们先观察这个网页的源代码,然后找到有关下拉菜单的部分: 范例: 请选择 ------------------------ colaccl.com cola's

Qt 多线程与数据库操作需要注意的几点问题(QSqlDatabase对象只能在当前线程里使用)

彻底抛弃MFC, 全面应用Qt 已经不少时间了.除了自己看书按步就班做了十几个验证性的应用,还正式做了3个比较大的行业应用,总体感觉很好.Native C++ 下, Qt 基本是我用过的最简便的界面库了.遇到了一些问题,大都解决的很顺利,回头想想,还是有几个问题很有意思,尤其是数据库应用.这里把我的经历分享一下. 1.线程内注册与连接数据库的竞争问题 文档上对多线程下数据库应用的注意事项写的很简明,一个线程创建的 QSqlDatabase 对象和 查出来的 QSqlQuery 对象只能给本线程用

Qt 多线程与数据库操作需要注意的几点问题

源地址:http://blog.csdn.net/goldenhawking/article/details/10811409 彻底抛弃MFC, 全面应用Qt 已经不少时间了.除了自己看书按步就班做了十几个验证性的应用,还正式做了3个比较大的行业应用,总体感觉很好.Native C++ 下, Qt 基本是我用过的最简便的界面库了.遇到了一些问题,大都解决的很顺利,回头想想,还是有几个问题很有意思,尤其是数据库应用.这里把我的经历分享一下. 1.线程内注册与连接数据库的竞争问题 文档上对多线程下数