2017-03-23 3 views
0

주 창에서 두 번째 창을 열고 있습니다. 이 창은 진행 표시 줄을 표시하는 데 사용되므로 열려있을 때 응용 프로그램을 차단하고 싶지 않습니다.백그라운드에서 창을 엽니 다.

내 코드는 다음 윈도우가 표시 될 때 실행이 using} 도달하면

public partial class MainWindow : Window, IDisposable 
{ 
    private void doUpdate(object sender, UpdateInfosArgs e) 
    { 
     this.Dispatcher.BeginInvoke(new Action(() => 
     { 
      using (DownloadingFileWindow dlw = new DownloadingFileWindow()) 
      { 
       dlw.OnDownloadFileComplete += OnDownloadFileComplete; 
       this.Dispatcher.BeginInvoke((Action)(() => dlw.ShowDialog())); 
       // or dlw.Show(); 
      } 
     } 
    } 
} 

는 현재, 즉시 폐쇄된다.

창이 닫혀있는 방법이 있습니까?

답변

1

사용 괄호는 작업을 완료 한 후에 개체를 정리하기 때문에 사용 후에는 닫힙니다.

사용 괄호 뒤에 열어 두려면 사용하기 위해 ressource를 시작하면 안됩니다.

DownloadingFileWindow dlw = new DownloadingFileWindow() 
dlw.OnDownloadFileComplete += OnDownloadFileComplete; 
this.Dispatcher.BeginInvoke((Action)(() => dlw.ShowDialog())); 

대화 상자 내에서 this.close()와 같은 닫는 루틴을 구현하십시오. 방아쇠로.

+0

사용하지 않는 것이 좋지만 ShowDialog는 항상 mainWindows를 차단합니다. 'dlw.Show()'를 사용하면 더 좋을 것입니다. –

2

대화 상자를 넌 모달 (비 차단)으로 열려면 ShowDialog() 대신 Show()을 사용해야합니다.

두 번째 문제점은 using 문입니다. 이 using 블록의 끝에 다시dlw을 처리하여 닫습니다.

그래서이 시도 :

private void doUpdate(object sender, UpdateInfosArgs e) 
{ 
    DownloadingFileWindow dlw = new DownloadingFileWindow(); 
    dlw.OnDownloadFileComplete += OnDownloadFileComplete; 
    dlw.Show(); 
} 

나는 그것을 명시 적으로 자식 창에 Dispose()를 호출 할 필요는 생각하지 않습니다. 이에 대한 설명은 this question을 참조하십시오.

+0

맞아요, 제 사용은 제 창문을 버리고있었습니다. Dispose 함수를 제대로 호출하려면'DownloadingFileWindow.OnClose'를 재정의해야합니까? –

+0

@ A.Pissicat은'Dispose()'질문에 대한 질문에 대한 링크를 추가했습니다 –

관련 문제