2014-03-27 4 views
0

Visual C#에서는 예외가 발생하면서 오류 메시지를 표시하는 메시지 상자를 호출합니다. 메시지 상자가 닫히지 않고 프로그램을 계속 실행하려면 어떻게해야합니까?메시지 상자를 표시하고 응용 프로그램을 실행하는 방법

+1

메시지 상자를 표시해야합니까? 왜 콘솔이나 텍스트 파일에 오류를 기록하고 거기에서 읽지 않습니까? 그렇지 않으면 http://stackoverflow.com/questions/10634663/messagebox-that-allows-a-process-to-continue-automatically – KJ3

+0

이 도움이되기를 바랍니다. http://stackoverflow.com/questions/3059487/create-a-modeless-messagebox – Jumpei

+1

예외를 기록한 다음 _fix_ 문제를 기록해야합니다. 예외는 일반적으로 코드가 손상되었다는 것을 의미합니다. 그러니 고쳐주세요. –

답변

4

MessageBox.Show 대신에 Form이라는 오류 메시지를 Form.Show() 메서드를 사용하여 넌 모달 방식으로 표시 할 수 있습니다. 이렇게하면 UI 스레드가 계속해서 롤링 될 수 있습니다.

물론 이것은 크기, 텍스트 정렬 및 기타와 같은 몇 가지 사항을 직접 설정해야한다는 것을 의미합니다. 하지만 한 가지 작업에이 작업을 사용하려는 경우 너무 많은 문제가 발생하지 않아야합니다.

나는 당신의 접근이 아주 이상하다는 것을 알아야한다. 일반적으로 오류가 발생하여 사용자에게 알리 길 원하면 메시지 상자가 닫힐 때까지 앱을 대기 상태로 유지해야합니다. 그렇게하지 않으면 의심 할 여지없는 문제가 발생할 수 있습니다. 예 : 오류가 이미 표시되는 동안 다른 오류가 발생하면 어떻게됩니까?

UI 스레드가 보류 중일 때 완료하려면 특정 작업이 필요하면 가능한 한 새 스레드에서 수행하는 것이 좋습니다. 이것은 최종 사용자의 경험을 기대 수준으로 유지하면서 원하는 것을 제공해야합니다. 당신이 대화의 결과에 릴레이해야하는 경우 확인 (, 또한

Task.Run(() => MessageBox.Show("Test")); 

: 당신이 절대적으로 비 블로킹 방식으로 실행해야하는 경우

+0

추천 해 주셔서 감사합니다. –

1

당신은 별도의 스레드에서 메시지 상자를 초기화 할 수 있습니다/Cancel) 아마 전체 메서드는 새 스레드에서 실행해야합니다.

Task.Run(
    () => 
     { 
      if (MessageBox.Show("Test", "test", MessageBoxButtons.OkCancel) == DialogResult.OK) 
      { 
       MessageBox.Show("Ok"); 
      } 
      else 
      { 
       MessageBox.Show("Cancel"); 
      } 
     } 
    ); 
+0

다른 스레드에서 UI 작업을 실행하는 데주의하십시오. – Crono

+0

분명히 권고하지 않았습니다. 메시지 상자를 절대적으로 비 차단 방식으로 표시해야하는 경우이를 최후의 수단으로 제시했습니다. – PiotrWolkowski

관련 문제