多线程窗口访问
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,异步执行。