CodeGuru Home VC++ / MFC / C++ .NET / C# Visual Basic VB Forums Developer.com
Results 1 to 4 of 4
  1. #1
    Join Date
    Sep 2002
    Posts
    19

    How to block/delay event?

    In VB6, is there a way to block or delay an event ? I want to finish my transaction process before the program go to other event handler.

  2. #2
    Join Date
    Jul 2003
    Location
    I'm Here!
    Posts
    31
    Sonnyzhang,

    This might help. Not sure if it's exactly what you're looking for.


    Code:
    'Declaration of Synchronizing Windows applications
    Public Const PROCESS_ALL_ACCESS = 2035711  '(&H1F0FFF)
    Public Const INFINITE = -1                 '(&HFFFFFFFF)
    Public Const WAIT_FAILED = -1              '(&HFFFFFFFF)
    Public Const STILL_ACTIVE = 259            '(&H103)
    Public Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
    Public Declare Function WaitForSingleObject Lib "kernel32" (ByVal hHandle As Long, ByVal dwMilliseconds As Long) As Long
    Public Declare Function GetExitCodeProcess Lib "kernel32" (ByVal hProcess As Long, lpExitCode As Long) As Long
    
    
    
    Public Function WaitOnProgram(ByVal idProg As Long, Optional ByVal WaitDead As Boolean) As Long
        
        Dim cRead As Long, iExit As Long, hProg As Long
        
        ' Get process handle
        hProg = OpenProcess(PROCESS_ALL_ACCESS, False, idProg)
        If WaitDead Then
            ' Stop dead until process terminates
            Dim iResult As Long
            iResult = WaitForSingleObject(hProg, INFINITE)
            If iResult = WAIT_FAILED Then 'ErrRaise Err.LastDllError
                MsgBox "Error during Shell command"
            End If
            ' Get the return value
            GetExitCodeProcess hProg, iExit
        Else
            ' Get the return value
            GetExitCodeProcess hProg, iExit
            ' Wait, but allow painting and other processing
            Do While iExit = STILL_ACTIVE
                DoEvents
                GetExitCodeProcess hProg, iExit
            Loop
        End If
    '    CloseHandle hProg
        WaitOnProgram = iExit
        
    End Function
    
    Public Sub RunSyncro(appname As String)
    
        Dim idProg As Double
        Dim iExit As Long
        Dim temp As String
         
        temp = appname ' & commandLine
        idProg = Shell(temp, 1)
        iExit = WaitOnProgram(idProg)
        If iExit <> 0 Then
            MsgBox App.Title & " could not find " & """" & appname & """", 48
        End If
    
    End Sub
    
    
    ' How to use
    
      cmdCreateFile.Enabled = False
      RunSyncro ("Notepad.exe C:\Test\TestFile.txt")
      cmdCreateFile.Enabled = True
    In this example the cmdCreateFile.Enabled will not be reset until you are done with Notepad.

  3. #3
    Join Date
    Sep 2002
    Posts
    19

    Hmm...

    Hi Confucius,

    Your code gives me some hints. But it is not quite fit my situation. I think your example will hung up the whole VB process until the child process complete. What I am looking for is blocking or delaying other event handler in the same VB project until one method is completed.

  4. #4
    Join Date
    Jul 2003
    Location
    I'm Here!
    Posts
    31
    What about using a timer with a boolean?

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  





Click Here to Expand Forum to Full Width

Featured