C# 多线程 异步加载 窗体

C# 多线程 异步加载 窗体

2014年05月28日 16:57:08 狂奔小蜗牛 阅读数:10709

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/gongzhe2011/article/details/27351853


我们在使用 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...";

}

}

}

}


 

posted @ 2019-01-04 20:30  grj001  阅读(192)  评论(0编辑  收藏  举报