.NET 线程委托的示例

本文介绍了一种使用线程委托来优化ComboBox控件加载大量数据时的响应速度的方法。通过将数据加载任务放到后台线程执行,避免了UI线程阻塞,解决了ComboBox在加载大量数据时可能出现的‘假死’现象。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

有时候使用线程委托可以很好的解决主线程耗时操作所反应的“假死”情况;

下面代码用在 ComboBox 控件下拉文本框中加载一个及时查询数据的线程委托过程

#Region "combox1线程委托"
    Dim mythreadcombox1 As Thread
    Private Delegate Sub cmbox1(ByRef ds As DataTable) '定义要委托的类型  

    Private Sub dtcombox1()
        Dim ds As DataTable = Nothing
        ds = 数据源
        Me.Invoke(New cmbox1(AddressOf gtcombox1), ds) '用New构造委托,再用Invoke执行  

        'mythread.Abort()
    End Sub

    '新加入的被委托要做的事  
    Private Sub gtcombox1(ByRef ds As Object)
        combox1.Update()
        combox1.DataSource = ds
        combox1.EndUpdate()


        'ComboBox1.Text = Nothing
        ' ComboBox2.Text = Nothing
    End Sub
#End Region


'下面开始执行委托的线程

mythreadcombox1 = New Thread(AddressOf dtcombox1)
mythreadcombox1.Name = "showcombox1"
mythreadcombox1.Start()
private Thread mythreadcombox1;
private delegate void cmbox1(ref DataTable ds);

private void dtcombox1()
{
    DataTable ds= null;
    ds = ???;
    this.Invoke(new cmbox1(this.datatable), new object[] { ds });
}

private void gtcombox1(ref object ds)
{
    this.combox1.Update();
    this.combox1.DataSource(ds);
    this.combox1.EndUpdate();
}

    Me.mythreadcombox1 = New Thread(New ThreadStart(AddressOf Me.dtcombox1))
    Me.mythreadcombox1.Name = "showcombox1"
    Me.mythreadcombox1.Start

 

转载于:https://my.oschina.net/u/2955242/blog/758482

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值