我们在使用 windowform 编程的时候,我们或许可能会越到,各种在窗体加载的时候,会进行其他的操作:
1.如果是在加载之前进行其它操作,则整个界面出来的很慢,而且若是时间长的话,页面很久才能出来;
2.如果是写在加载之后处理的话,虽然界面出来了,这个时候,出现了假死的状体。但是不能乱点,一点,就有卡死的现象。
现在我们利用异步和多线程来控制,并且加上进度条。来做一个界面加载的时候出现很大操作。
示例:
usingSystem.Windows.Forms; usingSystem.Threading; usingSystem; namespaceThreaddemo1 { public partial classForm1 : Form { publicForm1() { InitializeComponent(); } delegate void aa(string s);//创建一个代理 private void Form1_Load(objectsender, EventArgs e) { Thread newthread = new Thread(newThreadStart(ttread)); newthread.Start(); } voidttread() { pri("77"); } private delegate void ProgressBarShow(inti); private void pri(stringp) { bool name =richTextBox1.InvokeRequired; //MessageBox.Show(name.ToString()); if (!richTextBox1.InvokeRequired)//判断是否需要进行唤醒的请求,如果控件与主线程在一个线程内,可以写成if(!InvokeRequired) { Loadthread(); } else { //MessageBox.Show("不是同一个线程"); aa a1 = newaa(pri); Invoke(a1, new object[] { p });//执行唤醒操作 } } private voidLoadthread() { string s = string.Empty; for (int b = 0; b < 10000; b++) { this.ShowPro(b); s +=b.ToString(); } //MessageBox.Show("同一线程内"); LoadRichebox(s); } voidsend() { Thread.CurrentThread.Abort(); } private void LoadRichebox(strings) { richTextBox1.Text =s; } private void ShowPro(intvalue) { if (this.InvokeRequired) { this.Invoke(newProgressBarShow(ShowPro), value); } else { this.progressBar1.Value =value; this.label1.Text = value + "% Processing..."; } } } }
---------------------
作者:狂奔小蜗牛
来源:CSDN
原文:C# 多线程 异步加载 窗体
版权声明:本文为博主原创文章,转载请附上博文链接!