Я пытаюсь изменить несколько адресов. Тем не менее, мне нужен код, чтобы обновить их почти последовательно. Код работает, НО, когда флажок установлен, он зависает и не позволяет мне снять его. (Чтобы перестать менять адреса)

Я также попробовал:

Loop While CheckBox1.CheckState = 1

Но это не помогает проблеме.

Код:

Private Sub CheckBox1_Click(sender As Object, e As EventArgs) Handles CheckBox1.Click
    If IsProcessRunning("Notepad") = True Then
        Do
            Try
                WriteInteger("Notepad", &H49E6CC, 99)
                WriteInteger("Notepad", &H49E6D4, 99)
            Catch ex As Exception
            End Try
        Loop While True
    Else
        CheckBox1.CheckState = 0
        MessageBox.Show("Notepad Not Running!")
    End If
End Sub
0
John Kens 18 Мар 2017 в 19:20

2 ответа

Лучший ответ

[Решенная проблема] Ценю всех, помогите!

    Dim Timer1 As New Timer
Private Sub CheckBox1_CheckedChanged(sender As Object, e As EventArgs) Handles CheckBox1.CheckedChanged
    If CheckBox1.CheckState = 1 Then
        AddHandler Timer1.Tick, AddressOf Timer1_Tick
        Timer1.Interval = 500
        Timer1.Start()

    Else
        RemoveHandler Timer1.Tick, AddressOf Timer1_Tick
        Timer1.Stop()
    End If
End Sub

Private Sub Timer1_Tick(sender As Object, e As EventArgs)
    WriteInteger("Notepad", &H49E6D4, 99)
    WriteInteger("Notepad", &H49E6CC, 99)
End Sub
1
John Kens 18 Мар 2017 в 21:31

Приложение перестает отвечать на запросы, когда вы нажимаете на флажок, потому что вы написали бесконечный цикл в обработчике событий. Основной поток приложения обрабатывает выполнение событий пользовательского интерфейса.

Вам необходимо создать отдельный механизм, который будет непрерывно выполнять вашу логику, например, BackgroundWorker или с помощью отдельная тема.

Таким образом, обработчик события флажка включает / отключает только BackgroundWorker или разделенный Thread.

1
ZenLulz 18 Мар 2017 в 21:27