读书人

vb中实现多线程解决方案

发布时间: 2012-02-14 19:19:19 作者: rapoo

vb中实现多线程
vb中有个特费时的函数costtime(),这个函数和其他任何资源无关。是第三方控件的函数。执行它,程序界面就死了。是不是用多线程好些。
DoEvents是不是也行。我不会了。

[解决办法]
嗯,用DoEvents可以,出让控制权;也可以考虑用ActiveV EXE,实现多线程
[解决办法]

探讨
嗯,用DoEvents可以,出让控制权;也可以考虑用ActiveV EXE,实现多线程

[解决办法]
把这个函数放到一个ActiveX.exe中去执行....这样不会影响主程序
[解决办法]
翻到一个以前回的贴子,复制一个示例:

VB code
'--------------------------------- ActiveX.exe ----------------------------'新建一个ActiveX.exe工程名称: Test_ActiveX'其中类名称: cTest'添加一个窗体,名称: fTest'窗体上加一个Timer控件,名称TM'cTest上添加如下代码:Option ExplicitPrivate frm As FormPrivate WithEvents oTM As TimerPublic Event TestStart()      '开始事件Public Event TestEnd()        '结束事件Private FG As Object     '本例中用来模拟传入数据的表格控件Private Sub Class_Initialize()    Set frm = New fTest    Load frm    Set oTM = frm.TM    oTM.Enabled = FalseEnd SubPrivate Sub Class_Terminate()    Set oTM = Nothing    Unload frmEnd Sub'这个方法用来通知本程序开始执行任务Public Function StartTest(mData As Object) As Boolean    '参数mData可以是你要插入的数据对象,此例中传入一个表格控件    Set FG = mData     '实例化FG    '延时一下    oTM.Interval = 100    oTM.Enabled = True    StartTest = TrueEnd Function'插入数据到数据库,具体代码自己写了,这里只是随手写一下,模拟一个较长时间的操作Private Sub DataToDB()    'Dim cn As connection    Dim r As Long, c As Long    For r = 1 To FG.Rows - 1        For c = 1 To 300            Debug.Print FG.Text        Next    NextEnd SubPrivate Sub otm_Timer()    oTM.Enabled = False    RaiseEvent TestStart        '触发TestStart事件    DataToDB                    '执行"数据插入"    RaiseEvent TestEnd          '触发TestEnd事件End Sub'--------------------------------------'---------------------------- 测试工程 ------------------------------------'运行上面的Test_ActiveX'新建一个测试工程'在工程引用菜单下引用Test_ActiveX'窗体上加一个command,一个Label,一个MSHFlexGrid控件'代码:Option ExplicitDim WithEvents Obj As cTESTPrivate Sub Form_Load()    '加入测试数据    Dim i As Long    With MSHFlexGrid1        .Cols = 2        For i = 0 To 100            .AddItem Chr(32) & vbTab & Format(i, "0000000000"), 1        Next    End WithEnd SubPrivate Sub Form_Unload(Cancel As Integer)    Set Obj = Nothing     '释放对像End Sub'按键代码Private Sub Command1_Click()        Set Obj = New cTEST    Obj.StartTest MSHFlexGrid1   '传递MSHFlexGrid1中的数据,通知执行任务End Sub'类中的开始事件Private Sub Obj_TestStart()    Label1.Caption = "正在执行数据更新..."End Sub'类中的结束事件Private Sub Obj_TestEnd()    Label1.Caption = "数据更新完毕"    Set Obj = Nothing     '释放对像End Sub 

读书人网 >VB

热点推荐