다른 스레드를 닫을 때 다른 창 뒤에 응용 프로그램 창이 전송되었습니다 (C#)

StackOverflow https://stackoverflow.com/questions/192313

문제

C#.net에서 Windows Forms 응용 프로그램을 작성하고 있습니다.

시작시 응용 프로그램에는 별도의 스레드에서 실행되는 스플래쉬 화면이 표시됩니다. 스플래시 화면이 표시되는 동안 기본 응용 프로그램이 초기화됩니다.

기본 응용 프로그램이 초기화가 완료되면 응용 프로그램의 기본 형태가 표시되고 스플래시 화면이 여전히 상단에 표시됩니다.

지금까지 모든 것은 예상대로입니다.

그런 다음 스플래시 화면이 닫히므로 해당 스레드가 종료됩니다. 어떤 이유로, 시점에서, 메인 애플리케이션 Windows는 다른 모든 열린 Windows, 특히 Windows 탐색기 창 뒤에 전송되어 .exe 파일을 클릭하여 처음부터 응용 프로그램을 실행합니다!

이런 식으로 창문이 갑자기 "뒤로"점프하게하는 원인은 무엇입니까?

도움이 되었습니까?

해결책

스레드가 닫히면 기본 창에서 .activate ()를 호출하십시오.

그것은 결코 활동적이지 않았으므로 Z- 주문이 낮으므로 더 높은 것은 자연스럽게 위에있을 것입니다. 앱 에서이 정확한 시나리오를 수정해야했습니다.

잊지 마세요! invoke ()를 사용하여 올바른 스레드로 호출을 마샬링해야 할 수도 있습니다!

다른 팁

나도 때때로 이런 일이 일어났습니다. 밥의 반응이 가장 쉽고 대부분의 경우 나에게 효과가 있습니다. 그러나 무자비한 힘을 사용해야하는 경우가있었습니다. 다음과 같이 인터 로프를 통해이 작업을 수행하십시오.

dllimport ( "user32.dll")] public static extern bool setforegroundwindow (intptr hwnd);

스플래시 화면이 모달 대화 상자입니까?

Dialogresult를 설정하고 Hide () 또는 Close ()를 호출하여 모달 대화 상자를 두 번 기각하면이 창을 '점프'하는 것을 보았습니다.

다음과 같은 코드 :

private void button1_Click(object sender, System.EventArgs e)
{
     this.DialogResult = DialogResult.Abort;
     this.Hide();
}

보다 이것 모든 경우에 대한 블로그 항목 ...

다음과 같은 코드를 사용할 수 있습니다.

private void button1_Click(object sender, System.EventArgs e)
{
     this.DialogResult = DialogResult.Abort;
     this.Hide();
}

감사합니다!

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top