2017-03-18 2 views
0

몇 가지 주소를 변경하려고합니다. 그러나 거의 일관되게 업데이트하려면 코드가 필요합니다. 코드는 작동하지만, 체크 박스가 체크되어있을 때, 멈추고 체크하지 않게됩니다.올바른 루프를 수행하는 방법

Loop While CheckBox1.CheckState = 1 

을하지만 그 문제를 도움이되지 않습니다

Iv'e도 tryed (주소 변경을 중지하려면).

코드 : 이벤트 핸들러에서 무한 루프를 작성했기 때문에 체크 박스를 클릭하면

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 
+1

루프에서 어떻게 빠져 나올 것으로 예상합니까? –

+0

CheckBox1의 선택을 취소하십시오. –

+0

하지만 루프를 빠져 나오게 할 테스트가 없습니다. 버튼, 타이머 및 클래스 수준 변수를 사용하여이 작업을 수행하십시오. –

답변

1

[문제 해결] 모두의 도움을 감사하십시오!

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 
+0

약간의 메모, 타이머를 멈추고 처리기를 제거합니다. 어떤 영향을 미치는지 확실하지 않지만 논리적으로 작동해야한다고 생각합니다. – Bugs

1

응용 프로그램이 응답하지 않게됩니다. 응용 프로그램의 기본 스레드는 UI 이벤트의 실행을 처리합니다.

BackgroundWorker 또는 a separated thread과 같이 논리를 계속 실행하는 분리 된 메커니즘을 만들어야합니다.

따라서이 확인란의 이벤트 처리기는 BackgroundWorker 또는 분리 된 Thread 만 활성화/비활성화합니다.

관련 문제