【发布时间】:2014-11-20 16:12:19
【问题描述】:
我尝试在线程中通过 OleVariant 控制 TWebBrowser,但出现访问冲突错误。只有当我在 Delphi XE6 中使用以下代码时才会出现该错误:
var
Elements: OleVariant;
begin
Elements := Criar.Web.OleObject.document.all;
end;
作为“Criar”是一个线程。
查看完整代码:
type
TCriarWeb = class(TThread)
protected procedure Execute; override;
public
Web: TWebBrowser;
end;
type
TNavegar = class(TThread)
protected procedure Execute; override;
public
end;
procedure TNavegar.Execute;
var
Criar: TCriarWeb;
Elements: OleVariant;
i: Integer;
begin
inherited;
Criar := TCriarWeb.Create;
Sleep(500);
for i := 0 to 100 do begin
Criar.Web.Navigate('http://www.google.com');
while Criar.Web.ReadyState <> READYSTATE_COMPLETE do
Sleep(100);
Elements := Criar.Web.OleObject.document.all;
end;
end;
{ TCriarWeb }
procedure TCriarWeb.Execute;
begin
inherited;
CoInitialize(nil);
Web := TWebBrowser.Create(nil);
Web.HandleNeeded;
Web.Silent := true;
while true do
Application.ProcessMessages;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
Navegar: TNavegar;
begin
Navegar := TNavegar.Create;
end;
点击链接下载源代码:https://www.dropbox.com/s/di3oou8a7ztg22m/Tentativa%20Webbrowser.rar?dl=0
我需要帮助来解决这个问题。谢谢
【问题讨论】:
-
嗨,是的。 CallInitialize 被调用了,我的朋友。
-
对不起,我的意思是 CoInitialize。
标签: multithreading delphi access-violation twebbrowser