Copy大文件或者网络访问的时候处理假死。 那就用多线程加个进度条(只显示运行,没有进度)来表示状态运行吧。好了,废话少说,上个例子。先看结果图:
程序说明 代码生成器 :
点击Button,运行一个数据累加器,textBox显示每次运行的结果,ProgressBar表示运行的状态。
好了,直接贴代码:
01 | using System; |
02 | using System.Collections.Generic; |
03 | using System.ComponentModel; |
04 | using System.Data; |
05 | using System.Drawing; |
06 | using System.Linq; |
07 | using System.Text; |
08 | using System.Windows.Forms; |
09 | using System.Threading; |
10 | |
11 | namespace Testpro |
12 |
|
13 | public partial class Form1 : Form |
14 | |
15 | BackgroundWorker work = new BackgroundWorker(); |
16 | public Form1() |
17 | |
18 | InitializeComponent(); |
19 | work.WorkerReportsProgress = true |
20 | work.DoWork += Count; |
21 | work.RunWorkerCompleted += completeRun; |
22 | Control.CheckForIllegalCrossThreadCalls = false |
23 | this .textBox1.ScrollBars = ScrollBars.Both; |
24 | |
25 | |
26 | private void button1_Click( object sender, EventArgs e) |
27 | |
28 | this .progressBar1.Style = ProgressBarStyle.Marquee; |
29 | |
30 | work.RunWorkerAsync(); |
31 | |
32 | |
33 | private void Count( object sender, DoWorkEventArgs e) |
34 | { |
35 | float num = 0.0f; |
36 | int cun = 0; |
37 | while (num < 5000) |
38 | |
39 | cun++; |
40 | num += 4f; |
41 | this .textBox1.Text += num.ToString() + "\t" + e.Result; |
42 | if (cun == 9) |
43 | |
44 | textBox1.Text += Environment.NewLine; |
45 | cun = 0; |
46 | |
47 | } |
48 | |
49 | |
50 | public void SetText( object num) |
51 | |
52 | textBox1.Text += num.ToString() + "\n" |
53 | |
54 | |
55 | private void completeRun( object sender, RunWorkerCompletedEventArgs e) |
56 | |
57 | this .progressBar1.Style = ProgressBarStyle.Blocks; |
58 | |
59 | this .textBox1.Text += "complete" |
60 | MessageBox.Show( "Running complete....." ); |
61 | } |
62 | |
63 | } |