多线程窗口访问

多线程更新UI技巧

为了提高系统的响应速度,常常使用多线程获取数据并在控件中显示出来。但是在另一个进程中是不允许访问界面控件的。
如下面一段在另一线程中设置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)
ExpandedBlockStart.gifContractedBlock.gif        
{
            
new Thread(new ThreadStart(UpdateList)).Start ();
            
new Thread(new ThreadStart(UpdateList1)).Start ();

        }


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

        }

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

        }

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


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

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

转载于:https://www.cnblogs.com/ruinet/archive/2007/06/16/785955.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值