使用线程创建控件

 

public partial class Form1 : Form 
    { 
        Thread t; 
        private static int progress; 
        public Form1() 
        { 
            InitializeComponent(); 
            this.progressBar1.Minimum = 0; 
            this.progressBar1.Maximum = 2000; 
            t = new Thread(new ThreadStart(AddingControls)); 
        } 
 
        void AddingControls() 
        { 
            Button [] ctrs = new Button[2000]; 
            for (int i = 0; i < ctrs.Length;i++ ) 
            { 
                ctrs[i] = new Button(); 
                ctrs[i].Text = i.ToString(); 
                ctrs[i].Location = new Point(0, i * 20); 
                ctrs[i].Name = "aaa"; 
                progress = i; 
                if (this.InvokeRequired) 
                { 
                    this.Invoke(new AddControlToPanelDelegate(AddControlToPanel), new object[] { ctrs[i] }); 
                } 
            
            } 
        } 
 
        public delegate void AddControlToPanelDelegate(Control ctr); 
 
        void AddControlToPanel(Control ctr) 
        { 
            this.panel1.Controls.Add(ctr); 
            this.progressBar1.Value = progress; 
        } 
 
        private void button1_Click(object sender, EventArgs e) 
        { 
            t.Start();    
        } 
    } 

 

线程池

为什么说WinForm的控件只能在主线程中创建和调

 

posted on 2016-11-21 09:19  凡一二三  阅读(273)  评论(0编辑  收藏  举报