Visual Studio 2010 EnvDTE.OutputWindowPane에 진행 메시지를 쓰는 C# 코드가 있습니다. 이 코드는 VSPackage에있는 Visual Studio 메뉴에서 호출됩니다.Visual Studio 출력 창 새로 고침
문제는 메뉴 선택에 의해 호출 된 모든 처리가 완료 될 때까지 출력 창이 다시 그려지지 않으므로 각 줄을 추가 할 때가 아니라 한 번에 출력이 모두 나타납니다. 나는 이것이 주 스레드에서 수행되는 모든 처리와 관련이 있기 때문에 Visual Studio UI는 다시 칠할 수 없다고 생각합니다.
Visual Studio에서 Application.DoEvents() 같은 UI를 업데이트하는 "메시지 전달"방법이 있습니까? VSPackage는 또한 프로젝트의 일부 항목을 삽입하며 "즉시"발생하는 것으로 보입니다 - 지연되는 것만 나타나는 출력 창입니다.
이 기능에 대한 후보자를 찾지 못한 채 다양한 DTE 개체를 통해 철저히 조사했습니다.
올바른 수정 사항은 UI 스레드에서 처리하지 않는 것 같습니다. – perelman
그래, 계획은 작업 스레드로 처리를 이동하려고하는 것입니다,하지만 상당한 시간이 걸리고 나는 스레드 안전성의 일부 스레드 인터페이스 또는 스레드 친 화성이 있다면 걱정입니다. 알려진 안전한 지점에서 메시지를 펌핑하는 것이 덜 위험 해 보입니다. – UweBaemayr
귀하의 문제가 혼란 스럽습니다. 모든 UI 변경 사항은 UI 스레드에서 발생해야합니다. 당신은'dispatcher = System.Windows.Threading.Dispatcher '를 기억함으로써이를 보장 할 수있다.CurrentDispatcher'를 UI 스레드의 코드에 저장 한 다음 나중에 다른 스레드에서 UI 변경 사항을 실행하기 위해'dispatcher'를 사용합니다. 메시지가 전송 된 순서대로 표시되도록하려면 약간의 허구가 있어야합니다. – perelman