2012-08-14 4 views
0

Visual Studio 및 C#을 처음 사용했습니다. 방금 Windows Form 응용 프로그램을 완료했지만 다음과 같은 버그가 감지되었습니다. 사용자가 최소화/복원하거나 다른 작업으로 전환 할 때마다 프로그램이 종료됩니다 (응답 없음). 이 버그는이 프로그램을 실행하는 동안 사용자 멀티 태스킹을 막아 주므로 정말 고칠 수 있습니다. 문제의 가능한 원인과 해결 방법을 알고 싶습니다. 나는 정말로 어떤 제안이라도 고맙게 생각한다. 감사!Windows Form 응용 프로그램에 대한 작업을 전환 할 수 없습니다.

+0

GUI를 잠그고있는 Control.LostFocus 이벤트 처리기에서 뭔가하는 것처럼 들릴 수 있습니다. 코드에 게시 할 수있는 내용이 있습니까? –

+0

Control.LostFocus 이벤트 처리기와 관련된 코드가 없습니다. 이 프로그램은 거의 2000 라인을 가지고 있으며 코드의 작은 부분을 게시하는 것이 도움이 될 것이라고 생각하지 않습니다. 피터가 아래에서 제안했듯이 거대한 루프가 지금까지의 주된 원인이라고 생각합니다. – andyzhangcr7

답변

1

Form에서 길게 실행되는 루프 또는 장기간 작동하는 곳이면 어디든 상관 없습니다. 최소화하고 복원 할 때 "응답하지 않음"만 표시된다는 사실은 아마도 사용자가 창을 다시 그려야하고 강제로 Windows가 응용 프로그램이 멈추었 고 고스트 창을 사용하도록 인식하게 만들었 기 때문일 수 있습니다. 창을 최소화하고 복원하기 전에 창을 이미 매달아 놓았을 것입니다. 창을 이동하려고하면이 사실을 확인할 수 있습니다. 움직이지 않으면 매달아집니다. 움직이지 않으면 제목 표시 줄을 화면에서 벗어나 뒤로 이동하십시오 (예 : 제목 표시 줄의 가운데를 클릭하여 오른쪽으로 끌고 단추를 놓은 다음 화면에서 다시 가져 오기).).

+0

창이 움직이려고하면 프로그램이 멈추었습니다. 프로그램을 옮기거나 최소화하려고하지 않으면 문제가 없습니다. 거대한 루프를 돌릴 때 발생할 수 있다고 동의했습니다. 그러나 프로그램은 먼저 100k + 회선 파일을 반복하여 그렇게해야합니다. 루프 걱정 이외의 가능한 원인은 무엇입니까? – andyzhangcr7

+0

잘 작동하는 것처럼 보입니다. 창문은 여전히 ​​매달려 있습니다. 다른 앱으로 돌아가서 돌아 가면 비슷한 '응답하지 않음'문제가 발생합니다. 코드를 보지 않고도 루프 또는 다른 오랜 작업 일 수 있습니다. 추측은 무한합니다. 이 문제를 해결할 수있는 유일한 방법은 긴 작업을 찾아서 UI 스레드에서 다른 스레드로 옮기는 것입니다. BackgroundWorker가 유용합니다. –

+0

죄송합니다.이 프로젝트의 코드를 게시 할 수 없지만 어쨌든 고마워요. – andyzhangcr7

1

내가 틀리면 UI가 멈추는 문제가 있습니다. 그렇다면 왜 C# BackgroundWorker를 사용하지 않는가? 그것은 당신이 긴 작업을하고 있는지 여부와 관계없이 윈도우 폼을 멈추는 것을 방지하도록 도와줍니다. 여기에 좋은 자습서 http://www.dotnetperls.com/backgroundworker을 찾을 수 있습니다. 희망이 도움이 될 것입니다.

관련 문제