如何在 C# Winforms 项目中的 "InvokeMember()" 之前添加延迟

How to add a delay before "InvokeMember()" in a C# Winforms project

我正在尝试使用 C# 应用程序中的 webBrowser 控件自动登录我的网站。该网页检查填写和提交登录表单所需的时间。如果所用时间少于 2 秒,则显示 'error page' 表示 'Robots not allowed'.

现在我的应用程序也得到 'error page' 只是因为登录表单在 2 秒内填写完毕。如何在触发 'InvokeMember("click")' 之前添加延迟,以便网页计算的填写表格的时间超过 2 秒。

这是我的代码

HtmlElement ele = WebBrowser1.Document.GetElementById("username");
if (ele != null)
{     
    ele.InnerText = "myUsrname";
}
ele = webBrowser1.Document.GetElementById("password");
if (ele != null)
{
    ele.InnerText = "myPasswrd";
}
ele = webBrowser1.Document.GetElementById("submit");
if (ele != null)
{
    // I want to add a delay of 3 seconds here
    ele.InvokeMember("click");
}

注意:我使用了 "Task.Delay(3000);" 但它似乎不起作用。

编辑:这是我现在正在使用的并且对我有用。

async void webBrowser1_DocumentCompleted_1(object sender, WebBrowserDocumentCompletedEventArgs e)
{
......//my code
 await Task.Delay(3000);// this is where I wanted to put a delay
....
}

但我想,这样使用它正确吗?

你可以使用这个:

int milliseconds = 2000;
Thread.Sleep(milliseconds)  

你好,
ST

如果您想在等待时不冻结 UI,请考虑以下示例:

private async void button1_Click(object sender, EventArgs e)
{
    await Task.Run(async () =>
    {
        await Task.Delay(3000);
        MessageBox.Show("1");
        button1.Invoke(new Action(() => { this.button1.Text = "1"; }));
    });
    MessageBox.Show("2");
    button1.Invoke(new Action(() => { this.button1.Text = "2"; }));
}

样本是自我描述的。