텍스트 상자의 텍스트를 강조 표시하는 구문을 실행하는 가장 좋은 방법은 무엇입니까 (= 왼쪽은 빨간색, = 오른쪽은 파란색). CommandTask 스레드에서 데이터를 다시 검색하고 FinishCommand (UI 스레드에서)에서 강조 표시를 수행 했으므로 작동하지 않는 것처럼 보였습니다.하지만 UI를 약간 교착 상태로 만들었습니다.RichTextBox 구문 주요 스레드 모범 사례 강조 표시?
그렇다면 특수 문자가있는 RichTextBox Invoke 함수 (따라서 스레드 안전)에 강조 표시 코드를 배치하고 스레드에서 함수 호출을 이동했습니다. 그것도 효과가 있었지만, 어떤 이유로 든 4-8 초 정도 느려졌다. 이 코드는 정확한 코드이므로 나에게 의미가 없습니다.
마지막으로 스레드에서 temp RichTextBox를 만들고 결과 텍스트를 붙여 강조 표시했습니다. 그런 다음 모든 Invoke 함수가 실제 RichTextBox로 RTF를 전달했지만이 경우 RTF가 적절하지 않은 경우이 경우 해당 색상이 매번 2 씩 이동합니다. 예 : R = 빨강, B = 파랑 , X = 블랙 문자
는라인 1. RRRRXBBBB (올바른)
라인 2 XXRRRRBBB 등
라인 3. XXXXRRRRX가 (우측으로 4 시프트 (착색 오른쪽으로 2 시프트) 및)
내 가장 중요한 질문은 어떤 접근 방식이 가장 좋고, 왜 똑같은 코드를 더 느리게 처리하며, 접근 방식 3이 가장 좋은지, 그 위어 색상 이동. 감사!
글쎄, 제 3의 경우는 어떻습니까? 스레드는 RTF 문자열을 반환하고 RichTextBox에 씁니다. RichTextBox는 UI 스레드에서 onFinish가 발생하기 때문에 Invoke가 필요 없습니다. 이 경우에도 여전히 약 3-6 초 느리다. (또한 나는 그 변하는 버그를 고쳤다./r/n은 1 char로 간주되지만 2 바이트이기 때문에 rtf 문자열을 버리고 그냥 모든 것을 대체했다./r/n과/r/r 그리고 그것의 벌금) – Hershizer33
나는 몰라, 내가 볼 수없는 코드를 추측하도록 요구하고있다. RTF를 재분석해야하기 때문에 RTF의 큰 덩어리를 펌프로 보내면 RTB가 느려질 수 있습니다. –
좋은 지적, 병은 함께 관련 코드를 붙여서 붙여 넣습니다. – Hershizer33