有时候使用线程委托可以很好的解决主线程耗时操作所反应的“假死”情况;
下面代码用在 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