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;
新聞熱點
疑難解答
圖片精選