Android TWebBrowser从字符串加载html时引发线程异常
我正在开发一个将HTML字符串加载到WebBrowser的应用程序,但是当我从WebBrowser调用LoadFromString方法时,它会抛出一个RuntimeException,并显示以下消息: java.lang.RuntimeException:java.lang.Throwable:在线程“thread-2”上调用了WebView方法。必须在同一线程上调用所有WebView方法。(在null上调用的预期活套活套(main,tid 2){c7ba400},FYI主活套是活套(main,tid 2){c7ba400}) HTML存储在一个文件中并加载到一个字符串中,只是出于测试原因,最终的应用程序将从DataSnap获取字符串,并使用WebBrowser显示它 代码如下:Android TWebBrowser从字符串加载html时引发线程异常,android,delphi,firemonkey,delphi-10.1-berlin,Android,Delphi,Firemonkey,Delphi 10.1 Berlin,我正在开发一个将HTML字符串加载到WebBrowser的应用程序,但是当我从WebBrowser调用LoadFromString方法时,它会抛出一个RuntimeException,并显示以下消息: java.lang.RuntimeException:java.lang.Throwable:在线程“thread-2”上调用了WebView方法。必须在同一线程上调用所有WebView方法。(在null上调用的预期活套活套(main,tid 2){c7ba400},FYI主活套是活套(main,
procedure LoadString;
var
htmlContent: String;
filePath: String;
dbpath: String;
begin
filePath := TPath.Combine(TPath.GetDocumentsPath, 'index.html');
htmlContent := TFile.ReadAllText(filePath);
WebBrowser1.LoadFromStrings(htmlContent, 'about:blank');
btnSearch.Visible := False;
TabControl1.GotoVisibleTab(tbResult.Index);
end;
我没有在此应用程序中使用线程
如果相关的话,我正在使用Delphi 10.1 Berlin并在带有Android 9的Moto G5中进行测试。WebBroser方法需要在UI线程中运行,就像Dalija Prasnikar评论说的那样,我将调用移动到CallInUiThread,现在一切正常。在柏林,Delphi主线程与Android UI线程不同,您可能需要将WebView访问与CallInUiThread调用同步。另一种可能性是,调用LoadString的线程与创建WebView的线程不同。我没有Berlin,因此无法验证,因为Tokyo Delphi主线程与Android UI线程相同。我在哪里可以找到CallInUIThread?它在系统内吗。线程单元?我不知道。我再也没有柏林了。它是特定于Android的,所以它可以位于特定于Android的单元中。在FMX.Helpers.Android中找到它。非常感谢,它成功了