2014-09-06 2 views
0
I는 C#을 사용 디버거 구현하고

, 그것은 다음과 같이 작동한다 : 는 {F5} 키 기다려야 브레이크와 라인에별도의 스레드로 키 누르는 것을 수락하는 방법은 무엇입니까?

(이것은하여 MSScript.ocx 제어를 사용하는 VBScript를 디버거) 및 {F5} 키가 있으면 다음 코드 행으로 이동해야합니다.

이제 문제는 디버그 메서드에서 (이 메서드는 중단 점에 도달 할 때 호출 됨) 은 정적 변수 집합에 대한 루프 검사에서 계속 이동합니다 (컨트롤의 키 누르기 이벤트가이 정적 변수를 설정 함). 사실대로).

응용 프로그램이 응답하지 않고 중단해야합니다. 여기

그것을 위해 코드를 간다 :

다음 코드는 컨트롤에 {F5} 키를 허용하도록 제어를위한 것입니다 (예를 들어 TextBox 컨트롤)

private void fctb_KeyPress(object sender, KeyPressEventArgs e) 
{ 
if (e.KeyChar == (char)Keys.F5) 
{ 
    //Setting the static variable true when the control recieves a {F5} key 
    dVar = true; 
} 
} 

실행하는 다른 방법 중단 점을 계속하기 전에 DVAR 값에 대한 점검을 공격 후 : 은 아래와 같이 진행됩니다

while (!dVar) 
{ 
System.Threading.Thread.Sleep(100); 
} 

여기서 문제는 그 그것은 동안의 화장실을 입력 할 때 p는 키 누름을 수락하지 않고 응답하지 않게됩니다.

원하는 키 누르기를받을 때까지 코드 실행을 일시 중단하는 방법이 필요합니다.

또는

우리는 {F5} 키를 눌러 확인하고 응용 프로그램이 취소 응답하지 않는 별도의 스레드를 가질 수 있습니다.

아무도 도와 줄 수 있습니까?

+0

어떤 언어입니까? 글쓰기? – bmargulies

+0

그리고 어떤 운영체제에서 디버거를 쓰고 있습니까? –

답변

1

질문과 답변에서 실제로 이해하기 어렵습니다.

먼저 단계 키에 F10을 사용하십시오. 요즘 꽤 표준입니다.

가 키 누름에 프로그램 잠금을 사용하려면, 이런 식으로 뭔가를 사용할 수 있습니다

while (Console.ReadKey().Key != ConsoleKey.F11); 

이 괜찮 그것을 반복하지 않기 때문. ReadKey() 메서드는 키를 실제로 누를 때까지 실행을 일시 중단합니다. 따라서 CPU 리소스가 낭비되지 않습니다.


편집 : 정적 변수와 창 형태이 코드를 게시 한 의견에

:

private void fctb_KeyPress(object sender, KeyPressEventArgs e) 
{ 
    if (e.KeyChar == (char)Keys.F5) 
    { 
     dVar = true; 
    } 
} 

당신이 지금해야 할 일은 다른에 값을 다시 설정입니다 메소드/스레드를 사용하면 이벤트를 처리하자마자 :

// some code... 

while (!dVar) 
{ 
    System.Threading.Thread.Sleep(100); // don't ever loop without throttling CPU down 
} 

dVar = false; // event handled 

// some code... 
+0

Windows 응용 프로그램에서 ReadKey() 또는 다른 유사한 메서드를 사용할 수있는 Windows 기반 응용 프로그램입니다. 내가 키에 동의 아래의 코드를 사용하고 : '개인 무효 fctb_KeyPress (개체를 보낸 사람, KeyPressEventArgs 전자)' 를 '{' '(e.KeyChar == (문자) Keys.F5)이' '{' 'dVar = true;' '}' '}' 다른 방법은 bVar 값을 읽고 더 진행합니다. Windows 양식에서 키 누르기를 직접 기다릴 수 있습니까? – Jaskaran

+0

아니요, Windows 양식에서 키 누르기를 기다릴 수없고 기다릴 수도 없습니다. 그것들은 이벤트 중심적이다. (나의 예제는 콘솔 어플리케이션을위한 것이다.) 나는 당신이 필요로하는 것에 대해 조금 더 이해할 것이므로 나의 대답을 편집했다. – pid

+0

예, 문제가 있습니다. 그러나 루핑하는 동안 키 누르기를 수락하지 않습니다. (폴링 시간을 최대 5000으로 늘리려고 시도 함 - 아직 해결되지 않음) – Jaskaran

관련 문제