WinForm의 Dispose 방법을 어떻게 확장합니까?
문제
FXCOP 에서이 경고를 받고 있습니다.
" 'rellartform'에는 idisposable 유형 인 필드 'rellartform.done'이 포함되어 있습니다.
좋아, 나는 이것이 무엇을 의미하는지 이해하고 왜 이것이 해야하는지 이해한다 ... System.Windows.Forms.Form
당신이 당신을 무시할 수는 없습니다 .Close()
또는 .Dispose()
, 그래서 뭘 할건데? 현재이 솔루션으로 실행 중입니다.
private void RestartForm_FormClosing(object sender, FormClosingEventArgs e)
{
done.Set();
done.Close();
}
내 응용 프로그램에 대비 한대로 작동하지만 FXCOP는 여전히이 메시지를 보여줍니다. 내가 덮고 있고 안전하게 무시할 수 있습니까, 아니면 다른 방법이 있습니까?
해결책
당신은 그것을 무시해야합니다 Dispose
방법 Form
일반적으로 이것은 RETHARTFORM.DESIGNER.CS 파일에서 자동으로 재정의되므로 디자이너가 다시 작성하지 않고 추가 해야하는 모든 코드를 추가 할 수 있도록 코드 파일에 처리를 이동해야합니다.
ROTARTFORM.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();
reptartform이 system.windows.forms.form을 확장하면 dispose (bool drosposing)를 무시할 수 있어야합니다. 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 메소드,이 방법을 무시해야합니다. 통제에서 나옵니다 기본 클래스
protected override void Dispose(bool disposing)
{
if (disposing)
{
event.Dispose();
}
base.Dispose(disposing);
}
제휴하지 않습니다 StackOverflow