C# 多线程 异步加载 窗体
分类: C#2014-05-28 16:57 1286人阅读 评论(0) 收藏 举报
我们在使用 windowform 编程的时候,我们或许可能会越到,各种在窗体加载的时候,会进行其他的操作:
1.若是在加载之前,操作---》整个界面出来的很慢,而且若是时间长的话,页面很久才能出来,
2.若是写在加载之后处理的话,虽然界面出来了,这个时候,出现了假死的状体。但是不能乱点,一点,就有卡死的现象。
现在我们利用异步,和多线程来控制,并且加上进度条。来做一个界面加载的时候出现很大操作。
示例:
[csharp] view plaincopyprint?
- 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...";
- }
- }
- }
- }
时间: 2024-10-01 01:28:43