2011-09-24 2 views
5

Show()을 사용하여 열린 폼을 닫을 때 Close() 대신 Dispose()을 사용하면 어떻게됩니까? 누군가가 상세히 말해 줄 수 있습니까? Dispose() 방법에서 어떻게됩니까?close() 메서드 대신 dispose() 메서드를 사용하여

+0

C#에는 양식이 없습니다. WinForms/WPF/...를 지정하십시오. –

+0

@Henk Holterman - 내 질문을 업데이트했습니다. – Selo

+0

[양식이 닫힌 후에 양식을 처리해야합니까?] (https://stackoverflow.com/a/39501121/3110834)) –

답변

6

Close()Dispose()의 기본 차이는 Close() 메서드를 호출 할 때 관리되는 리소스를 일시적으로 닫고 다시 열 수 있다는 것입니다. 즉, 동일한 객체로 리소스를 다시 열거 나 사용할 수 있습니다. Dispose() 메서드는 정리를 위해 메모리에서 리소스 ((un) managed)를 영구적으로 제거하기 때문에 더 이상 처리 할 리소스가 없습니다.


또는 일반 진술. 연결 개체를 사용하여 Close()을 호출하면 연결이 다시 풀로 해제됩니다. Dispose()을 호출하면 Close()을 호출 한 다음 연결 문자열을 null로 설정합니다.

Stream과 같은 일부 개체는 IDisposable을 구현하지만 Dispose 메서드는 개체를 IDisposable으로 먼저 캐스팅 한 경우에만 사용할 수 있습니다. 그것은 Close() 방법을 폭로하지만.

나는 항상 Dispose()을 호출해야합니다. 객체를 처리 할 때 IDisposable을 구현하는 모든 객체에 대해 호출해야합니다. 아무것도하지 않더라도. jit 컴파일러는 어쨌든 최종 코드에서이를 최적화합니다. 개체에 Close()이 있지만 Dispose()이 없으면 Close()으로 전화하십시오.

은 또한 블록을 빠져 나오면도록 SqlConnection에 Dispose()를 호출합니다 IDispoable 객체

using(SqlConnection con = new SqlConnection()) 
{ 
    //code... 
} 

에 using 문을 사용할 수 있습니다.

3

디 컴파일 두 방법 (DisposeClose) 그냥 같이, 후자의 두 개의 추가 검사를 수행하고 Dispose 호출 밝혀 : 문서에서

object[] objArray; 
if (base.GetState(262144)) 
{ 
    throw new InvalidOperationException(SR.GetString("ClosingWhileCreatingHandle", new object[] { "Close" })); 
} 
if (base.IsHandleCreated) 
{ 
    this.closeReason = CloseReason.UserClosing; 
    base.SendMessage(16, 0, 0); 
    return; 
} 
base.Dispose(); 

:

양식이 닫히면 개체 내에 작성된 모든 자원이 닫히고 양식이 삭제됩니다. [...] 닫을 때 양식이 삭제되지 않는 두 가지 조건은 (1) 다중 문서 인터페이스 (MDI) 응용 프로그램의 일부이고 양식이 보이지 않는 경우입니다. (2) ShowDialog를 사용하여 양식을 표시했습니다. 이 경우 가비지 수집을 위해 양식의 모든 컨트롤을 표시하려면 Dispose를 수동으로 호출해야합니다.

희망이 있습니다.

1

사실,이 경우 Close()Dispose()는 매우 다르다 :

Close는 appropiate Windows 메시지를 전송하여 양식을 닫습니다.Open()

Dispose을 사용하여 양식을 다시 열 수 있으므로 양식 인스턴스를 다시 재사용 할 수 없습니다.

관련 문제