使用BackgroundWorker后,点击按钮时还是有假死状态

caicaihui caicaihui 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
点击后,开始一会儿界面会有假死状态,过完这个假死状态后面就流畅了,请问这个是什么问题。

BackgroundWorker bw = null;

public Form3()
{
InitializeComponent();

bw = new BackgroundWorker();
bw.WorkerSupportsCancellation = true;
bw.DoWork += new DoWorkEventHandler(bw_DoWork);
bw.RunWorkerCompleted += new RunWorkerCompletedEventHandler(bw_RunWorkerCompleted);
}

void bw_DoWork(object sender, DoWorkEventArgs e)
{
for (int i = 1; i < 100; i++)
{
Thread.Sleep(1);
if (bw.CancellationPending)
{
e.Cancel = true;
break;
}

this.Invoke((MethodInvoker)delegate
{
this.richTextBox1.Text += String.Format("第{0}次测试是否联网:{1}", i.ToString(), IsWWW("http://www.baidu.com?guid=" + Guid.NewGuid())) + Environment.NewLine;
});
Thread.Sleep(2000);
}
}

void bw_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
this.richTextBox1.Text += "执行完毕";
}

private void button1_Click(object sender, EventArgs e)
{
this.button1.Enabled = false;
this.button2.Enabled = true;

bw.RunWorkerAsync();
}

private void button2_Click(object sender, EventArgs e)
{
this.button1.Enabled = true;
this.button2.Enabled = false;

bw.CancelAsync();
}

private void richTextBox1_TextChanged(object sender, EventArgs e)
{
RichTextBox textbox = (RichTextBox)sender;

textbox.SelectionStart = textbox.Text.Length;
textbox.ScrollToCaret();
}


private bool IsWWW(string url)
{
try
{
new WebClient().DownloadString(url);
return true;
}
catch (Exception ex)
{
return false;
}
}
...全文
评论 6
收藏 已收藏
分享
返回顶部
caicaihui
.NET社区 62,271 成员 668,968 内容