2013-10-07 6 views
0

응용 프로그램이 시작되면 다른 스레드의 스플래시 화면이 표시됩니다. 그러나 시작하는 동안 오류가 발생하는 경우 - 메시지 상자가 표시됩니다. 문제는 메시지 상자가 스플래시 밑에 표시된다는 것입니다. IWin32Window 소유자 속성을 사용하고 심지어 MessageBoxOptions.DefaultDesktopOnly 속성을 사용하려고했지만 ID가 도움이되지 않았습니다.모든 스레드의 맨 위에있는 MessageBox

이 상황을 어떻게 관리 할 수 ​​있습니까?

추 신 : 보이지 않는 창을 만들려고했는데 TopMost를 설정하고 MessageBox를 표시합니다. 작동하지 않았다.

+1

당신은 윈도우 (폼, 메시지 박스,되는 SplashScreen 등)를 표시하는 UI 아닌 다른 스레드를 사용하지 말아야 –

+2

@SriramSakthivel : 그것은 보편적으로 사실이 아니다. 각 창마다 별개의 스레드를 사용할 수 있습니다. – Douglas

+0

@Douglas는 논쟁에 좋지만 현실은 아닙니다! 윈도우가 생성 된 스레드와 1 -> 1 관계를 가지고 있음을 알고 있지만, 생성 한 각 윈도우에 전용 스레드를 생성 할 수는 없습니다. –

답변

1

멀티 스레딩을 사용하여 유사한 상황을 만들었으며이 코드를 사용하여 MessageBox를 창 상단에 유지했습니다. 기본적으로이 코드는 메시지 상자를 가장 많이 만듭니다.

MessageBox.Show(this, 
    "Your text", 
    "Settings Needed", 
    MessageBoxButtons.YesNo, 
    MessageBoxIcon.Question, 
    MessageBoxDefaultButton.Button1, 
    (MessageBoxOptions)0x40000); // this is MB_TOPMOST flag 
관련 문제