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

时间:2015-09-24 11:07:28

标签: c# winforms webbrowser-control

我正在尝试使用我的C#应用​​程序中的webBrowser控件自动登录我的网站。网页检查填写和提交登录表单所需的时间。如果所花费的时间少于2秒,则会显示错误页面'说'机器人不被允许'

现在我的应用程序也正在获取错误页面'只是因为登录表单在2秒内被填满。如何在触发' InvokeMember("点击")' 之前添加延迟,以便网页计算填写表单的时间超过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
....
}

但我想,这是一种正确的使用方式吗?

2 个答案:

答案 0 :(得分:0)

你可以用这个:

int milliseconds = 2000;
Thread.Sleep(milliseconds)  

问候,
ST

答案 1 :(得分:0)

如果您想在等待时不冻结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"; }));
}

样本是自我描述的。