您的位置:首页 > 产品设计 > UI/UE

BeginInvoke 提高UI的响应速度

2007-05-08 10:17 363 查看
using System;
2using System.Collections.Generic;
3using System.ComponentModel;
4using System.Data;
5using System.Drawing;
6using System.Text;
7using System.Windows.Forms;
8
9using System.Threading;
10
11namespace CSharpGeriac
12using System;
2using System.Drawing;
3using System.Threading;
4using System.Windows.Forms;
5
6class Program : Form
7{
8 private System.Windows.Forms.ProgressBar _ProgressBar;
9
10 [STAThread]
11 static void Main()
12 {
13 Application.Run(new Program());
14 }
15
16 public Program()
17 {
18 InitializeComponent();
19 ThreadStart threadStart = Increment;
20 threadStart.BeginInvoke(null, null);
21 }
22
23 void UpdateProgressBar()
24 {
25 if (_ProgressBar.InvokeRequired)
26 {
27 MethodInvoker updateProgressBar = UpdateProgressBar;
28 _ProgressBar.Invoke(updateProgressBar);
29 }
30 else
31 {
32 _ProgressBar.Increment(1);
33 }
34 }
35
36 private void Increment()
37 {
38 for (int i = 0; i < 100; i++)
39 {
40 UpdateProgressBar();
41 Thread.Sleep(100);
42 }
43 if (InvokeRequired)
44 {
45 // Close cannot be called directly from
46 // a non-UI thread.
47 Invoke(new MethodInvoker(Close));
48 }
49 else
50 {
51 Close();
52 }
53 }
54
55 private void InitializeComponent()
56 {
57 _ProgressBar = new ProgressBar();
58 SuspendLayout();
59
60 _ProgressBar.Location = new Point(13, 17);
61 _ProgressBar.Size = new Size(267, 19);
62
63 ClientSize = new Size(292, 53);
64 Controls.Add(this._ProgressBar);
65 Text = "Multithreading in Windows Forms";
66 ResumeLayout(false);
67 }
68}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: