WinForm의 Dispose 메서드를 어떻게 확장합니까?
FxCop에서이 경고를 받고 있습니다.
" 'RestartForm'에는 IDisposable 유형 'ManualResetEvent'인 'RestartForm.done'필드가 있습니다. 'RestartForm'의 Dispose 메서드를 변경하여이 필드에서 Dispose 또는 Close를 호출합니다."
좋아, 내가 무엇을이 방법을 이해하고, 제외 이유는 ... 수행해야 할 것입니다 System.Windows.Forms.Form
당신도 무시할 수 없습니다 .Close()
또는 .Dispose()
이렇게 무엇을? 현재이 솔루션으로 실행 중입니다.
private void RestartForm_FormClosing(object sender, FormClosingEventArgs e)
{
done.Set();
done.Close();
}
내 응용 프로그램에 맞게 작동하지만 FxCop은 여전히이 메시지를 표시합니다. 내가 보장되고 안전하게 무시할 수 있습니까? 아니면이 작업을 수행해야하는 다른 방법이 있습니까?
다음에서 Dispose
메서드 를 재정의해야합니다.Form
일반적으로 이는 RestartForm.Designer.cs 파일에서 자동으로 재정의되므로 디자이너가 다시 작성하지 않고도 추가해야하는 코드를 추가 할 수 있도록 dispose를 코드 파일로 이동해야합니다.
RestartForm.cs에서
protected override void Dispose(bool disposing)
{
if (disposing)
{
if (components != null)
{
components.Dispose();
}
// Dispose stuff here
}
base.Dispose(disposing);
}
이 방법을 사용합니다 :)
Image bgImage = Image.FromFile(workingDir + "\\" + button.BackgroundImage);
currentButton.Image = bgImage;
currentButton.Disposed += (Object sndr, EventArgs evnt) => bgImage.Dispose();
RestartForm이 System.Windows.Forms.Form을 확장하는 경우 Dispose (bool disposing)를 재정의 할 수 있어야합니다. IDisposables를 처리하려면 "RestartForm"클래스에 대해이를 올바르게 구현해야합니다.
다음과 같아야합니다.
public override Dispose(bool disposing)
{
if (disposing)
{
// Dispose was called from user code. Dispose of managed resources here.
done.Dispose();
}
// Dispose of unmanaged resources here, and invoke base dispose.
base.Dispose(disposing);
}
Dispose 메서드를 재정의해야합니다.이 메서드 는 Control 기본 클래스 에서 가져옵니다.
protected override void Dispose(bool disposing)
{
if (disposing)
{
event.Dispose();
}
base.Dispose(disposing);
}
참고 URL : https://stackoverflow.com/questions/1052147/how-do-i-extend-a-winforms-dispose-method
'programing tip' 카테고리의 다른 글
Firebase 업데이트 대 세트 (0) | 2020.12.01 |
---|---|
emacs에서 탭 문자 찾기 (0) | 2020.12.01 |
파생 클래스가 인스턴스화 될 때 추상 클래스 생성자가 암시 적으로 호출되지 않습니까? (0) | 2020.12.01 |
Rails에서 URL 헬퍼에 대한 기본 호스트를 어떻게 설정합니까? (0) | 2020.12.01 |
Paperclip 및 RMagick에서 기존 이미지를 새로운 스타일로 크기 조정 (0) | 2020.12.01 |