c# - 为什么不调用 WebBrowser 控件中通过 setTimeout 方法调度的代码

标签 c# javascript webbrowser-control settimeout invokescript

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/

相关文章:

c# - 如何在 Web 浏览器控件中垂直向下滚动

c# - 如何在 C# 中使用 .net webbrowser 控件同时使用不同的帐户登录

c# - 使用协变/逆变实现的接口(interface)会产生编译时错误

c# - argument null异常和invalid异常怎么写?

javascript - $httpProvider 的转换请求中未定义参数 'data'

javascript - JQuery id 测试失败,带有单独 div 的动画系统

javascript - 使用 jQuery 事件显示和隐藏 <div>

windows - 从 SHDocVw WebBrowser 控件中检索 "highest level frame"

C# 检查服务是否设置为自动(延迟启动)

C# 针对 ARM : How to deserialize JSON?