vb6에서는 값이 변경되면 즉시 텍스트 상자 업데이트를 볼 수 있지만 .net에있는 것으로 나타났습니다. 현재있는 메서드가 종료 될 때까지 업데이트되지 않습니다 . 내가 가진 예비 질문은 메서드가 완료되기 전에 텍스트 상자를 업데이트하는 방법이 있는지 여부입니다.이상한 서식 동작입니다. text 속성을 설정 한 후 텍스트 상자에 나타나는 텍스트 만
문제는 Text 속성이 설정된 두 개의 텍스트 상자가 있고 메서드가 완료되면 그 중 하나만 일관되게 화면에 업데이트된다는 것입니다. 다른 하나는 보통 그렇지 않지만 때로는 그렇습니다. 매우 산발적입니다. 나는 문자 그대로 미친 알약을 먹지 않고 있다는 것을 증명하기 위해 누군가를 불러 냈고, 물론 그녀가 왔을 때 (비록 내가 코드 변경을하지는 않았지만) 일을 시작했다. 그런 다음 QA 녀석이 돌아 왔을 때 다시 작업을 중단했습니다 (다시 코드 변경을하지 않았습니다).
내가 해왔 던 모든 것은 중단 점을 설정하고이 텍스트 상자가 업데이트되지 않도록 유지하려는 코드를 단계별로 실행하는 것입니다. 절차가 끝나기 전에 종료 직전에 Text 속성을 확인할 수 있으며 올바른 값을 갖지만 메서드가 끝나면 사라집니다.
나는 곧 코드 스 니펫을 얻으려고 하겠지만, 그 동안에는 다른 사람들이이 문제와 디버깅 방법에 대한 좋은 아이디어를 갖고 있는지 알고 싶다. 나는 조금 좌절하고있다! 특정 시점에서 활성화되고 실행될 때 비활성화되는 타이머가이 타이머에 있습니다.이 타이머에 중단 점을 설정하면 중단 점이 절대 도달하지 않는 범인 b/c가 아닌지 확인됩니다. 그러나 내가 놓칠지도 모르는 다른 비동기 프로세스가있을 수 있는지 궁금합니다 ... 나는 그렇게 생각하지 않습니다. 그러나 당신이 저에게 무엇을 말해 줄 수 있다면, 나는 그것을 생각하지 않았을 수도 있습니다.
편집 : 코드 스 니펫을 게시 하겠지만 게시하려는 스 니펫은 문제를 재현하지 못하고 게시하기에 충분히 작은 코드 섹션으로 문제를 격리하지 않았습니다. 그래도 조금 더 많은 정보를 추가 할 것입니다 :
이 텍스트 상자를 업데이트하는 방법이 완료되면 컨트롤은 양식으로 돌아갑니다. 진행중인 다른 프로세스가 없습니다. 나는 어쩌면 일부 코드가 어딘가에서 텍스트 상자를 비우고 있다고 생각해 왔지만 코드를 통해 철저하게 살펴본 결과 이것이 확실한 것은 아니라고 확신했다.
때때로 디버깅 할 때 제대로 작동하고 드물게 정상적으로 실행될 때도 제대로 작동합니다. DoEvents()를 추가하여 작동하는지 확인하고 처음 수행했지만 ... 계속 작동하지 않았습니다. 좌절감에서 나는 텍스트 상자와 DoEvents()를 설정하기 위해 반복적 인 호출을 추가했다. 마지막으로 Sleep()에 대한 호출을 300 밀리 초 동안 추가했으며 지금은 더 좋아진 것 같습니다.
동일한 절차에서 설정되고 거의 모든 사항을 업데이트하는 데 문제가없는 폼에 또 다른 거의 동일한 텍스트 상자가 있음을 기억하십시오. 두 컨트롤 사이의 차이점을 찾았으며 크기, 위치 및 이름을 제외하고는 차이점을 찾을 수 없습니다.
갱신 코드 – Nighil
@Nighil에 질문 난 당신이 내가 말한 부분을 간과 추측 위해 Threading을 사용할 수 있습니다
yourtextbox.Invalidate();
을 다시 그려야 당신이 더 발생합니다
Invalidate();
이것을 사용할 생각 " 나는 곧 코드 스 니펫을 얻으려고 노력할 것입니다. ":) –VB6과 VB.NET 사이에는 고유 한 것이 없습니다. 'DoEvents'는 해킹 해결책이지만 좋은 것은 아닙니다. 교훈은 UI (메인) 스레드에서 장기 실행 계산이나 다른 작업을 절대로하지 않는 것입니다. UI가 정지합니다. 'BackgroundWorker' 컴포넌트는이 어플리케이션에 맞게 만들어졌습니다. MSDN 페이지는 훌륭한 샘플을 가지고 있으며 여기에서 동일한 질문을하는 많은 사람들을 찾을 수 있습니다. –