using System;
using System.Runtime.InteropServices;
using System.Windows.Forms;
public static class Program
{
[STAThread]
public static void Main()
{
using (var browser = new WebBrowser())
{
browser.Navigate(string.Empty);
browser.Document.InvokeScript("execScript", new object[] { "function set_obj(obj) { window.obj = obj }" });
browser.Document.InvokeScript("execScript", new object[] { "function say_hello() { window.obj.WriteLine('Hello world') }" });
browser.Document.InvokeScript("set_obj", new object[] { new Obj() });
browser.Document.InvokeScript("say_hello");
browser.Document.InvokeScript("setTimeout", new object[] { "say_hello()", 100 });
Console.ReadKey();
}
}
}
[ComVisible(true)]
public sealed class Obj
{
public void WriteLine(string message)
{
Console.WriteLine(message);
}
}
立即调用方法 say_hello 工作正常,但当我使用 setTimeout 推迟它时,它不会被调用。为什么?有什么解决方法吗?
最佳答案
作为用户@controlflow指出,我的应用程序中需要一个消息循环来使 setTimeout 工作。添加以下行有助于:
Application.Run(new Form { Controls = { browser }, WindowState = FormWindowState.Minimized, ShowInTaskbar = false });
关于c# - 为什么不调用 WebBrowser 控件中通过 setTimeout 方法调度的代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6587008/