좋아, 난 아주 간단 찾고 : 내 코드를 멈추지 않는 MessageBox를 만듭니다.코드를 중지하지 않는 MessageBox 만들기?
나는 다른 스레드 또는 뭔가를 만들어야 할 것 같니? 이를 수행하는 가장 좋은 방법을 조언하십시오.
감사합니다.
좋아, 난 아주 간단 찾고 : 내 코드를 멈추지 않는 MessageBox를 만듭니다.코드를 중지하지 않는 MessageBox 만들기?
나는 다른 스레드 또는 뭔가를 만들어야 할 것 같니? 이를 수행하는 가장 좋은 방법을 조언하십시오.
감사합니다.
아니요, 자신 만의 메시지 상자 양식을 만들어야합니다. MessageBox
클래스는 모달 연산 인 .ShowDialog()
과 비슷한 동작 만 지원합니다.
매개 변수를 사용하는 새 양식을 만들고 스타일 시트 상자를 원하는 형식으로 작성하는 데 사용하십시오.
업데이트 나는 둘째을하고 싶습니다 구글을 통해이 발견 다른 사람에 대한 선명도를 유지의 정신에서
2014년 7월 31일이 설명하기 좀 더 :
후드MessageBox
에서
는 Windows SDK user32.dll MessageBox Function 주위에 멋진 C# 래퍼이며, 따라서 시스템 호출에 같은 일을 나타내는 정수로 .NET 열거 형을 변환 한 후 (정확히 같은 방식으로 동작합니다.
,이것이 의미하는 바는 MessageBox.Show()
에 전화 할 때 운영 체제에 호출이 마샬링되고 블록 옵션이 선택되거나 창이 죽을 때까지 현재 스레드를 차단한다는 것을 의미합니다. 당신이 별도의 스레드에서 메시지 상자를 시작해야하지만이 다시 메시지 상자에서 (예를 오는 어떤 결과가/없음/확인/취소 없다는 것을 의미합니다 중단되는 코드를 방지하기 위해/Etc ...)는 메시지 상자를 호출하도록 지정된 별도의 스레드로 리턴됩니다.
이 메시지 상자의 결과에 따라 행동하면 스레드 안전을 위해 UI 스레드로 결과를 다시 보내야합니다.
또는 WinForms/WPF에서 고유 한 메시지 상자 양식을 만들고 .Show()
메서드로 호출 할 수 있습니다. 버튼의 클릭 이벤트는 UI 스레드에서 실행되므로 UI 스레드를 다시 호출하여 UI 스레드를 조작 할 필요가 없습니다.
별도의 스레드에서 호출하여 다른 메시지 펌프를 회전시킬 수 있습니다. MessageBox.Show
은 메시지를 펌프하므로 Application.Run
을 호출하지 않아도 안전합니다.
public void ShowMessageBox()
{
var thread = new Thread(
() =>
{
MessageBox.Show(...);
});
thread.Start();
}
편집 :
나는 아마 내가이 일을하지 않는 것이 좋습니다 언급해야한다. 다른 문제가 발생할 수 있습니다. 예를 들어 메시지를 펌핑하는 두 개의 스레드가있는 경우 양식이 다른 사람이 메시지 상자를 닫기를 기다리는 경우 메시지 상자가 다른 양식 뒤에 걸릴 수 없습니다. 문제를 둘러싼 또 다른 방법을 찾아 내려고 노력해야합니다.
잡았다. 그래서 나는 내 자신의 폼을 만들어야 만한다. 정말 고맙습니다. 감사합니다. – sooprise
그래서 만약 내가'MessageBox.Show (MessageBoxButtons.확인 ')을 클릭하면 사용자가 확인 버튼을 클릭 할 때까지 프로그램이 일시 중지됩니까? 자동화 프로세스를 실행하고 처음 2 개의 프로세스가 완료되면 Messagebox를 통해 프로세스를 일시 중지 한 다음 사용자가 메시지 상자를 클릭하면 다음 자동화 프로세스가 실행됩니다. – HanH1113
@ HanH1113 커버 안의'MessageBox.Show()'메쏘드는'.ShowDialog()'가하는 것과 같은 방식으로 효과적으로 실행됩니다. 블로킹 작업이므로 대화 상자가 닫힐 때까지 실행이 중단됩니다. 내 대답을 좀 더 명확하게 업데이트했습니다. – Aren