如何在 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"; }));
}
样本是自我描述的。
我正在尝试使用 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"; }));
}
样本是自我描述的。