일부 IO 작업 중에 대화 상자를 표시하고 그 후에 대화 상자를 코드로 닫습니다.사용자 상호 작용없이 WPF 대화 상자 닫기
DialogWindow dialog = new DialogWindow();
dialog.ShowDialog();
.... do some file operation....
dialog.Close();
하지만 대화 가까이하지 않습니다 : 뭔가있다. 나는 나 혼자서 그것을 닫아야한다. 코드를 닫는 방법은?
일부 IO 작업 중에 대화 상자를 표시하고 그 후에 대화 상자를 코드로 닫습니다.사용자 상호 작용없이 WPF 대화 상자 닫기
DialogWindow dialog = new DialogWindow();
dialog.ShowDialog();
.... do some file operation....
dialog.Close();
하지만 대화 가까이하지 않습니다 : 뭔가있다. 나는 나 혼자서 그것을 닫아야한다. 코드를 닫는 방법은?
ShowDialog()가 아닌 .Show()를 사용하십시오. ShowDialog를 사용하는 경우 새 창은 모달이므로 codice dialog.Close()의 행에 도달하기 전에 수동으로 창을 닫아야합니다.
ShowDialog()는 현재 스레드를 차단하므로 사용할 수 없습니다.
프로세스가 실행 중일 때 소유자 윈도우를 비활성화 한 다음 나중에 'this'가 소유자 윈도우 인 것처럼 활성화 할 수 있습니다. 물론 오류와 예외를주의해야합니다.
async private void Button_Click(object sender, RoutedEventArgs e)
{
Window1 win = new Window1();
this.IsEnabled = false;
win.Show();
await Task.Run(() =>
{
Thread.Sleep(2000);
});
win.Close();
this.IsEnabled = true;
}
다른 방법으로는 주 창 대신 열린 대화 상자 (ShowDialog()로 연 후)에서 파일 작업을 실행하는 것입니다.
'.Show()'를 사용하려고했으나,이 경우 사용자가 부모 창과 함께 작업 할 수 있으므로 허용하고 싶지 않습니다. – Sk1X1
다른 해결책 : ShowDialog를 사용할 수 있지만 this.Close()를 사용하여 모달 창 (DialogWindow의 새 인스턴스)에서 .Close를 호출해야합니다. –
새로운 메소드'CloseThisWindow()'(inside가'this.Close()')를 생성하고이 메소드를 호출하면 여전히 수동으로 대화 상자를 닫아야합니다. – Sk1X1