gpt4 book ai didi

c# - 我的按钮需要点击两次而不是一次

转载 作者:太空狗 更新时间:2023-10-30 01:08:40 29 4
gpt4 key购买 nike

我正在使用 C# 开发一个小应用程序,它会刷新网页直到满足某些条件。我有一个“Fire”=开始刷新按钮和一个“停止!”应该停止操作的按钮。我的问题是点击停止按钮需要 2 次尝试,而不是 1 次。下面是我的代码:

用计时器更新了代码。我仍然认为可以更好地使用计时器,我认为它不会在前 2-3 次刷新后每秒更新一次,或者根本不刷新。我的代码中是否存在我无法检测到的缺陷?

private void FireButtonClick(object sender, EventArgs e)
{

try
{
if (webBrowser1.Url.ToString().StartsWith("some url"))
{
_stopped = false;
_timer.Tick += new EventHandler(RefreshBrowser);
_timer.Interval = (1000) * (1);
_timer.Enabled = true;
_timer.Start();
}
else
{
MessageBox.Show("You must logon first.");
return;
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}

private void RefreshBrowser(object sender, EventArgs e)
{
string content = "disabled";
string baseUrl = @"http://some url";
string newUrl = string.Empty;
string buttonXpath = @"/html/body/div/div[6]/table/tr/td[2]/table/tr/td/table/tr/td/table/tr[3]/td[2]/div[4]/a";
webBrowser1.Refresh();
_proceed = false;
if (!content.ToLower().Equals("disabled") && !_stopped)
{

if (!_stopped)
{
HtmlAgilityPack.HtmlDocument htmlDocument = new HtmlAgilityPack.HtmlDocument();
htmlDocument.LoadHtml(webBrowser1.DocumentText);
HtmlNode node = htmlDocument.DocumentNode.SelectSingleNode(buttonXpath);
content = node.GetAttributeValue("disabled", string.Empty);
newUrl = node.GetAttributeValue("href", string.Empty);
}
}
else
{

webBrowser1.Navigate(baseUrl + newUrl);
}


}

private void webBrowser1_Navigated(object sender, WebBrowserNavigatedEventArgs e)
{
_proceed = true;
urlTextBox.Text = webBrowser1.Url.ToString();
}

private void MainPageButtonClick(object sender, EventArgs e)
{
try
{
webBrowser1.Navigate(_mainPage);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}

private void GoButtonClick(object sender, EventArgs e)
{
try
{
webBrowser1.Navigate(urlTextBox.Text);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}

}

private void StopButtonClick(object sender, EventArgs e)
{
_timer.Stop();
_proceed = true;
_stopped = true;
}

最佳答案

您真的应该修改您的代码以使用计时器。当您滥用 GUI 线程并定期调用 Application.DoEvents(); 时,点击只能在那个地方处理,这意味着您必须进入循环来处理事件。

这绝对不适合 GUI 编程。请改用计时器。

Here是关于如何使用计时器定期调用方法的示例。在您的情况下执行页面刷新。

关于c# - 我的按钮需要点击两次而不是一次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8834977/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com