读书人

为何使用了BackgroundWorker还是很卡

发布时间: 2013-03-06 16:20:31 作者: rapoo

为什么使用了BackgroundWorker,还是很卡,界面还是出现未响应
大家帮我看看了,不知道哪里出问题,应该如何修改?


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++)
{
if (bw.CancellationPending)
{
e.Cancel = true;
break;
}

this.Invoke((MethodInvoker)delegate
{
this.richTextBox1.Text += Environment.NewLine + String.Format("第{0}次测试是否联网:{1}", i.ToString(), IsWWW("http://www.baidu.com"));
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;
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;
}
}


[解决办法]
Thread.Sleep(2000);
把UI主线程给睡眠了,当然卡了,这个删掉。
[解决办法]
会不会是测试联网那里运行慢了
bw.CancellationPending

还有你看下一般连到多少次就可以跳出连接了
[解决办法]
if (bw.CancellationPending)
{
e.Cancel = true;
break;
}

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

读书人网 >asp.net

热点推荐