C#编程总结(四)多线程应用2014-03-20 cnblogs 停留的风多线程应用很广泛,简单总结了一下:1)不阻断主线程,实现即时响应,由后台线程完成特定操作2)多个线程,完成同类任务,提高并发性能3)一个任务有多个独立的步骤,多个线程并发执行各子任务,提高任务处理效率下面我们通过几个小例子做简单介绍。
1、进度条
分析:页面动态刷新,主页面正常可操作。我们通过后台线程来实现进度条。首先,创建Winform页面,然后拖入进度条控件,将页面的代码改为以下代码即可。这里只是个简单的例子,其实我们可以做的更好,将进度条封装为一个自定义控件,设计为一个通用 好看的进度条。这里只讲技术和方向,大家可以自己研究研究。相关代码:
using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms;using System.Threading;namespace ProgressBarSample{//定义委托,异步调用delegate void ShowProgressDelegate(int totalStep, int currentStep);public partial class Form1 : Form{public Form1(){InitializeComponent();}/// <summary>/// /// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void btnStart_Click(object sender, EventArgs e){ParameterizedThreadStart start = new ParameterizedThreadStart(SetProgress);Thread progressThread = new Thread(start);progressThread.IsBackground = true;//标记为后台进程,在窗口退出时,正常退出progressThread.Start();}/// <summary>/// 设置当前进度/// </summary>/// <param name="state"></param>void SetProgress(object state){for (int i = 1; i <= 100; i++){Thread.Sleep(200);object[] objs = new object[] { 100, i };//异步调用this.Invoke(new ShowProgressDelegate(ShowProgress), objs);}}/// <summary>/// 刷新进度条/// </summary>/// <param name="totalStep"></param>/// <param name="currentStep"></param>void ShowProgress(int totalStep, int currentStep){this.progressBar1.Maximum = totalStep;this.progressBar1.Value = currentStep;this.lbCurrent.Text = this.progressBar1.Value * 100 / progressBar1.Maximum + "%";}}}