代码改变世界

多线程窗口访问

2007-06-16 21:28  ruinet  阅读(622)  评论(0编辑  收藏  举报

为了提高系统的响应速度,常常使用多线程获取数据并在控件中显示出来。但是在另一个进程中是不允许访问界面控件的。
如下面一段在另一线程中设置textbox1.的值,在运行时是会报错的:
 Thread One = new Thread(new ThreadStart(ThreadFuncOne));

Private Void ThreadFuncOne()
{
   textBox1.txt="AAAA";
}
下面是我写的一个小demo,点击开始两个线程同时开始循环线两ListBox中插入项,
最后你可以看到ListBox基本时同时完成插入项。

实现的代码如下:


        
private void button1_Click(object sender, EventArgs e)
        
{
            
new Thread(new ThreadStart(UpdateList)).Start ();
            
new Thread(new ThreadStart(UpdateList1)).Start ();

        }


        
private void UpdateList1()
        
{
            
int i = 0;
            
while (i < 5000)
            
{
                i
++;
                listBox1.Invoke(
new EventHandler(AddItem1), new object[] { i, EventArgs.Empty });
            }

        }

        
private void UpdateList()
        
{
            
int i=0;
            
while (i<5000)
            
{
                i
++;
            listBox1.Invoke(
new EventHandler(AddItem), new object[] { i,EventArgs .Empty });
            }

        }

        
private void AddItem(object o, EventArgs e)
        
{
            
string temp = o.ToString ();
            listBox1.Items.Insert (
0,temp);
        }


        
private void AddItem1(object o, EventArgs e)
        
{
            
string temp = o.ToString();
            listBox2.Items.Insert(
0, temp);
        }

 同时可以将上面的Invoke的方法改为BeginInvoke,异步执行。


free web counter