2016-08-01 5 views
0

일부 IO 작업 중에 대화 상자를 표시하고 그 후에 대화 상자를 코드로 닫습니다.사용자 상호 작용없이 WPF 대화 상자 닫기

DialogWindow dialog = new DialogWindow(); 
dialog.ShowDialog(); 
.... do some file operation.... 
dialog.Close(); 

하지만 대화 가까이하지 않습니다 : 뭔가있다. 나는 나 혼자서 그것을 닫아야한다. 코드를 닫는 방법은?

답변

0

ShowDialog()가 아닌 .Show()를 사용하십시오. ShowDialog를 사용하는 경우 새 창은 모달이므로 codice dialog.Close()의 행에 도달하기 전에 수동으로 창을 닫아야합니다.

+0

'.Show()'를 사용하려고했으나,이 경우 사용자가 부모 창과 함께 작업 할 수 있으므로 허용하고 싶지 않습니다. – Sk1X1

+0

다른 해결책 : ShowDialog를 사용할 수 있지만 this.Close()를 사용하여 모달 창 (DialogWindow의 새 인스턴스)에서 .Close를 호출해야합니다. –

+0

새로운 메소드'CloseThisWindow()'(inside가'this.Close()')를 생성하고이 메소드를 호출하면 여전히 수동으로 대화 상자를 닫아야합니다. – Sk1X1

0

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()로 연 후)에서 파일 작업을 실행하는 것입니다.

관련 문제