是否可以从WPF应用程序调用WebBrowser.InvokeScript异步?

时间:2013-12-10 14:19:04

标签: wpf webbrowser-control

我想在托管的WebBrowser中调用JavaScript函数。我的JavaScript函数很慢(在UI中没有检索数据或ajax),我想在执行JavaScript函数时使我的WPF接口响应。

2 个答案:

答案 0 :(得分:3)

您可以异步调用JavaScript函数(例如,在计时器上),但异步不会假设多线程,该函数仍将完全在主UI线程上执行。并且您不能为此使用单独的线程,因为基础WebBrowser ActiveX控件是STA COM对象。

如果你真的必须在JavaScript函数中执行冗长的UI更新工作,那么正确的方法是限制更新逻辑并在多个步骤中执行它,每个步骤都是异步的,以保持UI线程的响应。您可以使用setTimer或jQuery的delay执行此操作。结构更加结构化的方法是使用jQuery Deferreds,如here所述。

答案 1 :(得分:1)

我们以某种方式解决了我们的问题,可能对其他人有用。 在调用WebBrowser之后,我们在一个新的UI线程中启动一个新窗口,并将我们的新窗口放在上一个窗口(它的线程忙于在WebBrowser中进行JavaScript计算),这样我们就可以以某种方式显示进度条和加载页面在我们的HTML中进行大量绘图。