我正在使用CEFSharp,并注册一些C ++ / CLI本机函数,其中一个函数很耗时,因此html页面中有一个忙图标。我希望在调用这个耗时的本机函数时显示这个繁忙的图标,但是,由于在调用本机函数时DOM没有刷新,因此图标卡住了:
原生功能:
public ref class ActivationForm : Form
{
public:
ActivationForm(void)
{
}
ActivationForm(MainAppForm^ iHost, String^ iTitle)
{
InitializeComponent();
this->webBrowser->RegisterJsObject("FormWrapper", gcnew ActivationForm::FormWrapper(this->webBrowser, this));
}
private:
CefSharp::WinForms::WebView^ webBrowser;
ref class FormWrapper
{
CefSharp::WinForms::WebView^ webBrowser;
ActivationForm^ mActivationForm;
public:
FormWrapper(CefSharp::WinForms::WebView^ iWebBrowser, ActivationForm^ iActivationForm)
{
webBrowser = iWebBrowser;
mActivationForm = iActivationForm;
}
int activateMail(String^ iMail, String^ callback);
};
int ActivationForm::FormWrapper::activateMail(String^ iMail, String^ callback)
{
//connect to activation server
}
js code:
function activateExistingUser() {
...
if (!window.FormWrapper.activateMail(emailAddress)) {
isWaitingForTask = false;
me.displayFullInfoWindow();
}
}
是否有任何解决方案可以让DOM刷新并显示忙碌图标?感谢
答案 0 :(得分:2)
正如您所发现的,绑定方法以同步方式执行。我建议的方法是生成“任务”,立即返回并致电ExecuteScriptAsync
以有效Callback
进入您的网页。
正在进行添加异步回调的工作,应该包含在版本39
中,如果您感兴趣,https://github.com/cefsharp/CefSharp/pull/868会提供信息。