* Control.AllowDrop 을 true 로 설정한 상태에서는 Control 의 메모리가 해제되지 않습니다.
예를 들면 다음과 같습니다.
void Test()
{
Control control = new Control();
control.AllowDrop = true;
}
위의 코드에서 Test() 메소드가 호출된 이후 'control' 이라는 인스턴스의 메모리가 해제되지 않습니다.
ildasm 으로 System.Windows.Forms.Control 의 set_AllowDrop(bool) 메소드를 분석해 보면
AllowDrop 이 True 가 되면 DropTarget class 의 인스턴스를 Control 의 인스턴스를 이용하여 생성하고
RegisterDragDrop 을 호출하면서 인자값으로 DropTarget 의 인스턴스를 이용합니다.
(RegisterDragDrop function 에 대해서는 추가적으로 설명하지 않습니다.)
따라서, AllowDrop 을 true 로 설정할 때 DropTarget 에 의해 인스턴스의 참조 카운터가 증가하게 됩니다.
[해결방법]
Control.AllowDrop 속성을 이용해야할 때는 마지막에(Dispose 전) 속성값을 false 로 설정하시면 됩니다.
ps. 데브피아에 좋은 내용 있어 올립니다.
Form 을 마우스로 Drag 하여 이동하기 (0) | 2011.03.22 |
---|---|
Form 마우스로 드래그 하여 이동하기 (0) | 2011.03.21 |
string to Enum Conversion (0) | 2011.01.27 |
[단일 프로세스 실행] (0) | 2010.12.31 |
[Windows Forms 창 흔들기 효과] (0) | 2010.12.31 |