2010-06-10 5 views
2

수정 또는 주소 지정 방법이 너무 이상하지 않은 이상한 문제가 있습니다. 나는 미니 텍스트 편집기 스타일 응용 프로그램 인 RichTextBox 편집기를 작성하고 있습니다.응용 프로그램없이 C# Windows Forms 응용 프로그램에서 유휴 시간을 감지합니다.

위치 변경, 선택 텍스트 및 영역 주변의 텍스트 컨텍스트에 대한 다양한 기타 비트를 변경 한 후 복잡한 구문 분석을 수행해야합니다.

약간의 처리가 필요하기 때문에 사용자가 화살표 키를 사용하여 스크롤하는 경우 선택 항목이 변경 될 때마다 처리하지 않기를 원합니다. Application.Idle 사용을 생각했지만 너무 규칙적으로 발생합니다. 타이머를 시도했지만 선택 화살표가 움직이는 동안 발사 할 수 있습니다.

은 내가 생각되었다 타이머에게를 RichTextBox 인 selectionchanged 이벤트가 발생이 타이머가 500   MS 또는 1000   MS 안타 후 때 복잡한 처리 실행을 실행할 때마다 재설정 유틸리티의 카운트 다운 타이머 정렬했다.

소리가 좋은가요?

+0

언제 처리해야합니까? 무언가가 선택되거나 커서 위치 만 변경되는 경우 (SelectionLength == 0)? – tanascius

답변

4

너무 오래 걸리면 자신의 스레드에서 처리를 시작해야합니다. 새로운 입력을 얻 자마자 이전 계산을 중단하고 새 정보로 다시 시작할 수 있습니다. 따라서 스레드에 대한 취소 메커니즘을 고려하십시오.

스레드가 완료되면 그 결과가 유효한지 (selecion이 변경되지 않았는지) 확인해야합니다. 마지막으로, 계산 결과를 GUI와 충분히 동기화 할 수 있습니다.

GUI에 쓰지 않고도 일정량의 계산이 가능한 경우에만 작동합니다. 나는이 방법으로 구현할 수 있을지 확신하지 못한다. 계산 유형에 따라 다릅니다.

+1

Nah, 그 스레드에서 할 수있는 유용한 것은 없습니다. RTB의 속성에 액세스 할 수 없습니다. –

+0

@ 한스 ... 그래서 내가 계산의 유형에 의존한다고 썼다. 맞춤법 검사는 스레드에서 수행 할 수 있습니다 ... 잘못된 단어를 색칠하는 것은 물론 외부에서 수행되어야합니다. – tanascius

관련 문제