首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VB >

vb中兑现多线程

2012-12-31 
vb中实现多线程vb中有个特费时的函数costtime(),这个函数和其他任何资源无关。是第三方控件的函数。执行它,

vb中实现多线程
vb中有个特费时的函数costtime(),这个函数和其他任何资源无关。是第三方控件的函数。执行它,程序界面就死了。是不是用多线程好些。
DoEvents是不是也行。我不会了。
[解决办法]
嗯,用DoEvents可以,出让控制权;也可以考虑用ActiveV EXE,实现多线程
[解决办法]

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

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


'--------------------------------- ActiveX.exe ----------------------------

'新建一个ActiveX.exe工程名称: Test_ActiveX
'其中类名称: cTest
'添加一个窗体,名称: fTest
'窗体上加一个Timer控件,名称TM
'cTest上添加如下代码:

Option Explicit

Private frm As Form
Private WithEvents oTM As Timer
Public 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 = False
End Sub

Private Sub Class_Terminate()
    Set oTM = Nothing
    Unload frm
End Sub

'这个方法用来通知本程序开始执行任务
Public Function StartTest(mData As Object) As Boolean
    '参数mData可以是你要插入的数据对象,此例中传入一个表格控件
    Set FG = mData     '实例化FG
    '延时一下
    oTM.Interval = 100
    oTM.Enabled = True
    StartTest = True
End 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
    Next
End Sub

Private Sub otm_Timer()
    oTM.Enabled = False
    RaiseEvent TestStart        '触发TestStart事件
    DataToDB                    '执行"数据插入"
    RaiseEvent TestEnd          '触发TestEnd事件
End Sub
'--------------------------------------

'---------------------------- 测试工程 ------------------------------------
'运行上面的Test_ActiveX
'新建一个测试工程
'在工程引用菜单下引用Test_ActiveX
'窗体上加一个command,一个Label,一个MSHFlexGrid控件
'代码:

Option Explicit

Dim WithEvents Obj As cTEST

Private 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 With
End Sub

Private 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

热点排行