Member 10974007 Ответов: 1

Как создать паузу и возобновить работу в потоке


<pre>Flags()> _  
    Public Enum ThreadAccess As Integer 
        TERMINATE = (&H1)  
        SUSPEND_RESUME = (&H2)  
        GET_CONTEXT = (&H8)  
        SET_CONTEXT = (&H10)  
        SET_INFORMATION = (&H20)  
        QUERY_INFORMATION = (&H40)  
        SET_THREAD_TOKEN = (&H80)  
        IMPERSONATE = (&H100)  
        DIRECT_IMPERSONATION = (&H200)  
    End Enum 
 
    Private Declare Function OpenThread Lib "kernel32.dll" (ByVal dwDesiredAccess As ThreadAccess, ByVal bInheritHandle As Boolean, ByVal dwThreadId As UInteger) As IntPtr  
    Private Declare Function SuspendThread Lib "kernel32.dll" (ByVal hThread As IntPtr) As UInteger  
    Private Declare Function ResumeThread Lib "kernel32.dll" (ByVal hThread As IntPtr) As UInteger  
    Private Declare Function CloseHandle Lib "kernel32.dll" (ByVal hHandle As IntPtr) As Boolean 
 
    Private Sub SuspendProcess(ByVal process As System.Diagnostics.Process)  
        For Each t As ProcessThread In process.Threads  
            Dim th As IntPtr  
 
            th = OpenThread(ThreadAccess.SUSPEND_RESUME, False, t.Id)  
            If th <> IntPtr.Zero Then 
                SuspendThread(th)  
                CloseHandle(th)  
            End If 
        Next 
    End Sub 
 
    Private Sub ResumeProcess(ByVal process As System.Diagnostics.Process)  
        For Each t As ProcessThread In process.Threads  
            Dim th As IntPtr  
 
            th = OpenThread(ThreadAccess.SUSPEND_RESUME, False, t.Id)  
            If th <> IntPtr.Zero Then 
                ResumeThread(th)  
                CloseHandle(th)  
            End If 
        Next 
    End Sub 


Что я уже пробовал:

как создать поток с паузой с помощью кнопки управления для возобновления
Dim work1 As System.Threading.Thread = New Threading.Thread(AddressOf Some task)

1 Ответов

Рейтинг:
0

RickZeeland

Вы можете использовать Нить.Спать() хотя это не считается хорошей практикой, это заморозит ваше приложение: https://www.dotnetperls.com/sleep-vbnet[^]

Смотрите ответ здесь для альтернативы: Подождите 5 секунд, прежде чем продолжить код VB.net - переполнение стека[^]
А также: Класс ManualResetEvent (System.Продевать Нитку) | Майкрософт Документы[^]