b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

backgroundworker_C # backgroundworker_winform进度条控件

电脑杂谈  发布时间:2017-01-17 23:06:10  来源:网络整理

BackgroundWorker是一个非常不错的线程控件,能避免界面假死,让线程操作你想要做的事,它学习起来很简单,但是能实现很强大的功能。发布这篇文章的目的是将最近学习到的共享出来,大家交流一下,当然我也是菜鸟,在这里你将学习到BackgroundWorker简单使用,停止,暂停,继续等操作,BackgroundWorker比起Thread和ThreadPool要简单太多,为了更方便在实际应用中使用,我使用的是winform,没有使用控制台程序。

在UI界面里拖动一个button和richTextBox到界面。

我会从最简单的开始,只有最简单的代码才会让人有继续学下去的欲望,下列代码可以将1到999打印到richTextBox1控件上。

private void button1_Click(object sender, EventArgs e)

{

//创建一个BackgroundWorker线程

BackgroundWorker bw = new BackgroundWorker();

//创建一个DoWork事件,指定bw_DoWork方法去做事

bw.DoWork += new DoWorkEventHandler(bw_DoWork);

//开始执行

bw.RunWorkerAsync();

}

void bw_DoWork(object sender, DoWorkEventArgs e)

{

for (int i = 0; i < 1000; i++)

{

this.richTextBox1.Text += i + Environment.NewLine;

}

}

但是很不幸,以上代码会报错,报错信息:线程间操作无效: 从不是创建控件“richTextBox1”的线程访问它。

那么我们继续改造代码,让数字显示在richTextBox1控件上,并且让richTextBox1焦点处于最低端。

private void button1_Click(object sender, EventArgs e)

{

//创建一个BackgroundWorker线程

BackgroundWorker bw = new BackgroundWorker();

//创建一个DoWork事件,指定bw_DoWork方法去做事

bw.DoWork += new DoWorkEventHandler(bw_DoWork);

//开始执行

bw.RunWorkerAsync();

}

void bw_DoWork(object sender, DoWorkEventArgs e)

{

for (int i = 0; i < 1000; i++)

{

this.Invoke((MethodInvoker)delegate

{

this.richTextBox1.Text += i + Environment.NewLine;

});

}

}

private void richTextBox1_TextChanged(object sender, EventArgs e)

{

RichTextBox textbox = (RichTextBox)sender;

textbox.SelectionStart = textbox.Text.Length;

textbox.ScrollToCaret();

}

上面是BackgroundWorker一个最简单的例子,没有多余复杂的代码,这就是BackgroundWorker,下面我们加入停止按钮,让线程停下来。


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-27007-1.html

相关阅读
    发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

    热点图片
    拼命载入中...