我們在使用 windowform 編程的時候,我們或許可能會越到,各種在窗體加載的時候,會進行其他的操作:
1.若是在加載之前,操作---》整個界面出來的很慢,而且若是時間長的話,頁面很久才能出來,
2.若是寫在加載之后處理的話,雖然界面出來了,這個時候,出現了假死的狀體。但是不能亂點,一點,就有卡死的現象。
現在我們利用異步,和多線程來控制,並且加上進度條。來做一個界面加載的時候出現很大操作。
示例:
- using System.Windows.Forms;
- using System.Threading;
- using System;
- namespace Threaddemo1
- {
- public partial class Form1 : Form
- {
- public Form1()
- {
- InitializeComponent();
- }
- delegate void aa(string s);//創建一個代理
- private void Form1_Load(object sender, EventArgs e)
- {
- Thread newthread = new Thread(new ThreadStart(ttread));
- newthread.Start();
- }
- void ttread()
- {
- pri("77");
- }
- private delegate void ProgressBarShow(int i);
- private void pri(string p)
- {
- bool name = richTextBox1.InvokeRequired;
- //MessageBox.Show(name.ToString());
- if (!richTextBox1.InvokeRequired)//判斷是否需要進行喚醒的請求,如果控件與主線程在一個線程內,可以寫成if(!InvokeRequired)
- {
- Loadthread();
- }
- else
- {
- // MessageBox.Show("不是同一個線程");
- aa a1 = new aa(pri);
- Invoke(a1, new object[] { p });//執行喚醒操作
- }
- }
- private void Loadthread()
- {
- string s = string.Empty;
- for (int b = 0; b < 10000; b++)
- {
- this.ShowPro(b);
- s += b.ToString();
- }
- //MessageBox.Show("同一線程內");
- LoadRichebox(s);
- }
- void send() {
- Thread.CurrentThread.Abort();
- }
- private void LoadRichebox(string s)
- {
- richTextBox1.Text = s;
- }
- private void ShowPro(int value)
- {
- if (this.InvokeRequired)
- {
- this.Invoke(new ProgressBarShow(ShowPro), value);
- }
- else
- {
- this.progressBar1.Value = value;
- this.label1.Text = value + "% Processing...";
- }
- }
- }
- }
