.NET 3.x Приостановить/продолжить работу потока - Visual Basic .NET

Узнай цену своей работы

Формулировка задачи:

Доброго! не удается приостановить работу потока (resume/suspend - не работает) поток работает с внешним приложением с некоторыми непредсказуемыми случаями и что бы не начинать по новой. все что удалось найти (не работает - поток продолжает работу)https://msdn.microsoft.com/en-us/lib...aithandle.aspxhttps://msdn.microsoft.com/en-us/lib...e.waitone.aspx
Листинг программы
  1. Imports System.Threading
  2. Public Class Form1
  3. Dim th1 As New Thread(AddressOf ThreadProc)
  4. Dim paused As Int16 = 0
  5. Private wh As ManualResetEvent = New ManualResetEvent(True)
  6. 'Private wh As EventWaitHandle = New AutoResetEvent(True)
  7. 'Private wh As EventWaitHandle = New EventWaitHandle(False, EventResetMode.ManualReset)
  8. Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
  9. th1.Start()
  10. End Sub
  11. Private Sub ThreadProc()
  12. wh.WaitOne()
  13. While True
  14. MsgBox("")
  15. End While
  16. End Sub
  17. End Class
  18. '------------------приостановить/возобновить работу потока-----------------------------------
  19. Private Sub Button5_Click(sender As Object, e As EventArgs) Handles Button5.Click
  20. If paused = 0 Then
  21. Button5.ForeColor = Color.Red
  22. paused = paused + 1
  23. wh.Reset()
  24. Else
  25. Button5.ForeColor = Color.Black
  26. paused = paused - 1
  27. wh.Set()
  28. End If
  29. End Sub
сделал так но цикл выполняется полностью... и далее начинается с начало
Листинг программы
  1. Imports System.Threading
  2. Public Class Form1
  3. Dim th1 As New Thread(AddressOf ThreadProc)
  4. Dim paused As Int16 = 0
  5. Dim manualEvent As New ManualResetEvent(True)
  6. '------------------приостановить/возобновить работу потока-----------------------------------
  7. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
  8. If paused = 0 Then
  9. Button1.ForeColor = Color.Red
  10. paused = paused + 1
  11. manualEvent.Reset()
  12. Else
  13. Button1.ForeColor = Color.Black
  14. paused = paused - 1
  15. manualEvent.[Set]()
  16. End If
  17. End Sub
  18. Private Sub ThreadProc(manualEvent As Object)
  19. Dim ev As ManualResetEvent = DirectCast(manualEvent, ManualResetEvent)
  20. While ev.WaitOne()
  21. MsgBox("1")
  22. Thread.Sleep(2000)
  23. MsgBox("2")
  24. Thread.Sleep(2000)
  25. MsgBox("3")
  26. End While
  27. End Sub
  28. Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
  29. th1.Start(manualEvent)
  30. End Sub
  31. End Class

Решение задачи: «.NET 3.x Приостановить/продолжить работу потока»

textual
Листинг программы
  1. Private Sub ThreadProc(manualEvent As Object)
  2.         'play / pause
  3.         Dim ev As ManualResetEvent = DirectCast(manualEvent, ManualResetEvent)
  4.         While ev.WaitOne()
  5.             MsgBox("1")
  6.             Thread.Sleep(2000)
  7.             If ev.WaitOne = False Then Exit Sub
  8.             MsgBox("2")
  9.             Thread.Sleep(2000)
  10.             If ev.WaitOne = False Then Exit Sub
  11.             MsgBox("3")
  12.             Thread.Sleep(2000)
  13.         End While
  14.     End Sub
  15.  
  16.     Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
  17.         'start and check status
  18.         If th1.ThreadState = ThreadState.Running Or th1.ThreadState = ThreadState.WaitSleepJoin Then
  19.             Exit Sub
  20.         Else
  21.             th1.Start(manualEvent)
  22.         End If
  23.  
  24.     End Sub
  25.  
  26.  
  27.     Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
  28.         'stop and exit
  29.         th1.Abort()
  30.         Application.Exit()
  31.     End Sub

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

8   голосов , оценка 3.625 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут