2012-11-22 4 views
2

저는 C#에 익숙해졌습니다.C# BackgroundWorker가 DoWork를 건너 뛰고 곧바로 RunWorkerCompleted로갑니다.

지금까지 - 클라이언트 연결을 수신하고 이에 따라 클라이언트에 응답하는 콘솔 앱이 있습니다.

단추와 텍스트 상자가있는 WPF 폼도 있습니다. 이 단추는 서버에 BackgroundWorker로 연결하는 코드를 시작한 다음 텍스트 상자의 끝에 추가하기 전에 응답을 기다립니다.

위대한 작품입니다. 때로는 두 번. 그러나 DoWork 블록이 전혀 호출되지 않고 RunWorkerCompleted로 곧바로 진행되는 것으로 나타났습니다. 물론 .result는 공백이므로 문자열로 변환하려고하면 실패합니다.

이것은 신참 실수입니까? 나는 위의 말을하는 다양한 방법에 대한 인터넷 검색을 시도했지만 아무 것도 발견하지 못했습니다.

이것은 코드입니다. http://pastebin.com/ZQvCFqxN - 내게 너무 많은 디버그 출력이 있습니다. 뭐가 잘못 됐어. 어떤 도움이 많이 감사 http://pastebin.com/V412mppX

:

디버그 출력의 결과입니다. 감사!

편집 : (아래 패트릭 쿼크 덕분에) 후 수정 관련 코드는 다음과 같습니다

public void dorequest(string query) 
{ 
    request = new BackgroundWorker(); 
    request.WorkerSupportsCancellation = true; 
    request.WorkerReportsProgress = true; 
    request.ProgressChanged += request_ProgressChanged; 
    request.DoWork += request_DoWork; 
    request.RunWorkerCompleted += request_RunWorkerCompleted; 
    request.RunWorkerAsync(query); 
} 

답변

6

당신은 RunWorkerAsync를 호출 한 후 DoWork 처리기를 부착하고 있습니다. 그것들을 뒤집어서 고쳐야합니다.

앞으로도 외부 사이트를 사용하는 대신 질문에 코드를 붙여 넣으십시오. 가능한 경우 문제를 나타내는 코드를 최소화하십시오. 우리와 같은 문제가있는 사람들에게 더 쉽게 해줍니다.

+0

고마워요. (팁을 주셔서 감사합니다.) –

+0

덧글을 대신 덧글로 게시 하시겠습니까? – Patrick

+0

원래 요청에 붙여 넣었습니다. 비슷한 문제가있는 다른 사용자를 도울 수 있기를 바랍니다. –

관련 문제