2012-08-06 5 views
1

2 개의 양식 (mainlogin)이 있습니다. 나는이 코드 조각으로 로그인 폼 엽니 다Application.Exit()이 예상대로 작동하지 않습니다.

toolStripProgressBar1.Value = 50; 
toolStripStatusLabel_dynamic.Text = "Proberen toegang te verkrijgen..."; 
Login login = new Login(); 
login.ShowDialog(); 
do_login(); 

을 그리고 나는이 같은 eventhandler에 로그인 폼의 상단에 ToolStrip에 메뉴가 있습니다

private void afsluitenToolStripMenuItem_Click(object sender, EventArgs e) { 
    Application.Exit(); 
} 

그러나 두 형태의 후

이 폐쇄됩니다 프로그램은 계속 작동합니다 (함수 do_login을 호출합니다). 그러나 변수가 설정되지 않고 양식이 사라져서 do_login이 전혀 작동하지 않습니다 ...

그러면 전체 클릭하면 프로그램 실행이 멈 춥니 다. 툴팁?

답변

4

당신은 때문에 해결해야 할거야 Application.Exit()의 정의는 다음과 같습니다.

메시지 펌프를 종료해야 함을 알리고 메시지 처리 후 모든 응용 프로그램 창을 닫습니다.

는 그래서 그것을 말하는 것은 모든 메시지가 종료됩니다 처리 완전히을하고 나면,하지만 당신이 처리해야하는 메시지를 갖고 있기 때문에 대화는 먼저 마무리가 닫힌 후. 출구를 제대로하고 있지만 null을 확인한 다음 do_Login() 메서드에서 null 인 경우 반환해야합니다.

+0

설명해 주셔서 감사합니다. 그러나 나는 다른 일을 할 필요가 없으므로 이것 역시 해결했습니다 : Environment.Exit (0); 하지만 고마워 anywhay – Mathlight

+0

@ TWCrap - 나는 ** 응용 프로그램을 죽이고 ** 당신이이 [스레드] (http://stackoverflow.com/questions/905544/whats-ko/) 환경 결정을 결정하기 전에 환경 종료 및 애플리케이션 종료 사이의 차이)를 결정해야합니다. 'Environment.Exit'는 절대적으로 필요한 경우가 아니라면 좋은 접근 방법이 아닙니다. 당신이 그렇게 말할 때 –

+0

괜찮아.나는 체크에서 구축 할 것이다 ;-) – Mathlight

4

ShowDialog의 결과를 확인 하시겠습니까?

using(var login = new Login()) { 
    if(login.ShowDialog() == DialogResult.OK) { 
     do_login(); 
    } 
} 

합니다 (using는 당신이 ShowDialog()를 사용하는 경우 Dispose()를 호출 할 책임이 있습니다 때문이지만, 하지 당신은 Show() 호출 할 때)

1

시도해보십시오. Environment.Exit (0);

+0

덕분에 ;-) 그 일한 : D 조 – Mathlight

2

나는 Application.Exit() 호출을 생각하지 않는다; 나가는 좋은 방법입니다. 하나는 응용 프로그램을 종료 할 때 정리하기 위해 다른 코드를 실행할 수 없습니다.

대신 Login에서 DialogResult를 반환하여 닫기가 필요함을 나타내야합니다. 그러면 주 양식에서이를 확인하고 정상적으로 마감해야합니다.

3

마크의 답변과 결합하여 Application.ExitEnvironment.Exit(0)으로 변경하십시오.

private void afsluitenToolStripMenuItem_Click(object sender, EventArgs e) { 
    Environment.Exit(0); 
} 
관련 문제