2017-10-29 1 views
0

코드 아래에 제시된 방법보다 WPF에서 새로운 창을 열어 더 효율적인 방법이 있는지 궁금 해서요에게 개방하는 적절한 방법 : windowConfigureDatabase 내가 원하는 새 창입니다새 WPF 창

WindowConfigureDatabase windowConfigureDatabse;  

private void ButtonConfigureDatabase_Click(object sender, RibbonControlEventArgs e) 
    { 
     if (windowConfigureDatabase == null) 
     { 
      windowConfigureDatabase = new WindowConfigureDatabase(); 
     } 

     windowConfigureDatabase.Clear(); 
     windowConfigureDatabase.Show(); 
     windowConfigureDatabase.WindowState = WindowState.Normal; 
    } 

열기 위해. windowConfigureDatabase.Clear(); 모든 값을 기본값으로 재설정합니다. 재설정 할 값이 많지 않습니다. 이것이 wpf에서 새 창을 여는 올바른 방법인지 궁금합니다. 내가 생각하고 있던 다른 길은 각 버튼을 클릭 할 때마다 새 창을 만드는 것뿐이었습니다. (매번 값을 지울 필요는 없습니다 ...)하지만 사용자가 열면 너무 많은 메모리를 할당하는 것이 두려워요. 가비지 컬렉터가 OnClose 이벤트에서 윈도우를 선택하는지 잘 모르겠다.

기본적으로 내 질문은 - 가비지 수집기가 닫히거나 닫힌 이벤트 중에 닫은 후에 내 창을 선택합니까? 그렇지 않다면 창 메모리를 수동으로 관리하는 올바른 방법은 무엇입니까?

windowConfigureDatabase = null의 청산에

/OnClosing 이벤트가 잘 할 추가 하시겠습니까?

답변

1

가비지 수집기는 닫은 후/닫힌 이벤트 중에 내 창을 닫은 후 닫습니다.

예, 연결할 수없는 경우 더 좋은 아이디어를 위해 this을 읽으십시오.

겠습니까 할뿐만 청산/OnClosing 이벤트에

windowConfigureDatabase = null이

을 추가?

예. 이 작업을 수행하지 않으면 windowConfigureDatabase을 덮어 쓸 때까지 창을 가비지 수집하지 못하도록하거나 해당 개체를 포함하는 개체를 수집합니다.

창에 사용되는 메모리는 크기 및 수행해야 할 작업에 할당되는 메모리 용량에 따라 다릅니다. 당신은 창문 (~ 30 +) 및/또는 많은 양의 데이터를 생성하지 않는 한 일반적으로 걱정할 필요가 없습니다.

할당하는 가장 빠른 방법은 가능한 경우 앞면을 (이상적으로는 시작할 때) 할당하고 가능한 경우 다시 사용하는 것입니다. 다행스럽게도 Windows에서는 비교적 쉽습니다. 아이디어는 닫히지 않고 숨기고 진정으로 더 이상 필요하지 않을 때에 만 닫는 것입니다. 이처럼

:

// In each window class or as a base class: 
private bool isClosable = false; 

protected override void OnClosing(CancelEventArgs args) 
{ 
    // Prevent closing until allowed. 
    if (!isClosable) { 
     args.Cancel = true; 
     Hide(); 
    } 
    base.OnClosing(args); 
} 

// Call this when you want to destroy the window like normal. 
public void ForceClose() 
{ 
    isClosable = true; 
    Close(); 
} 
+0

이 내가 거짓 DialogResult를 = 제외하고, 지금 내 코드에서 무엇을 정말 가깝습니다. 기본 yes-> exit 버튼 인 버튼이있는 경우에만 필요하다고 가정합니다. –

+0

이 경우 DialogResult를 false로 설정하는 것은 정상입니다. 취소/숨기기를 취소 효과가 필요로하지 않는 한 필요하지 않습니다. –

+0

괜찮습니다. 그래서 이걸로 고집하고 있지만 지금은 그들 각각에 대해 별도의 기능을 수행하는 것보다 창을 닫은 후에 값을 다시 기본값으로 설정하는 더 좋은 방법을 찾아야합니다 ... –