编程语言
首页 > 编程语言> > c# – 为什么不调用通过WebBrowser控件中的setTimeout方法调度的代码

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

作者:互联网

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 });

标签:javascript,settimeout,webbrowser-control,c-2,invokescript
来源: https://codeday.me/bug/20190826/1734896.html