C# 自定义控件和处置
故事的开始是 我有一个组件,我希望它能够清理计时器(托管资源,对吗?): 如您所见,我尝试实现了另外一个(oO)C# 自定义控件和处置,c#,winforms,controls,dispose,C#,Winforms,Controls,Dispose,故事的开始是 我有一个组件,我希望它能够清理计时器(托管资源,对吗?): 如您所见,我尝试实现了另外一个(oO)IdDisposable(尽管PictureBox->Control->Component->IDisposable)。但是他们没有一个被叫来 控件通过使用设计器放置在窗体上。但是它不会出现在表单组件中,这应该是在处理表单时不调用它的原因: Form1 form = new Form1(); form.Dispose(); // MyPictureBox.Dispose() are n
IdDisposable
(尽管PictureBox->Control->Component->IDisposable)。但是他们没有一个被叫来
控件通过使用设计器放置在窗体上。但是它不会出现在表单组件中,这应该是在处理表单时不调用它的原因:
Form1 form = new Form1();
form.Dispose(); // MyPictureBox.Dispose() are not called
我的问题是,我应该如何组织处理我的控制计时器以获得我所需要的-将MyPictureBox计时器与表单处理一起处理?您必须覆盖处理(bool disposing)
。并且无需显式实现IDisposable
protected override void Dispose(bool disposing)
{
_timer1.Dispose();
_timer2.Dispose();
base.Dispose(disposing);
}
您必须重写Dispose(bool disposing)
。并且无需显式实现IDisposable
protected override void Dispose(bool disposing)
{
_timer1.Dispose();
_timer2.Dispose();
base.Dispose(disposing);
}
尽管Sriram的回答是正确的,但如果您使用的是非托管类型,如COM对象,则应使用终结器模式:
public class MyPictureBox : PictureBox, IDisposable
{
private Timer _timer1 = new Timer();
private Timer _timer2 = new Timer()
//more of your stuff
~MyPictureBox ()
{
Dispose(false);
}
protected override void Dispose(bool disposing)
{
//clean up unmanaged here
if(disposing)
{
_timer1.Dispose();
_timer2.Dispose();
}
base.Dispose(disposing);
}
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
}
请参见处置模式:
在使用PictureBox时,请记住图像类型也必须是可识别的。尽管Sriram的回答是正确的,但如果您使用的是非托管类型,如COM对象,则应使用终结器模式:
public class MyPictureBox : PictureBox, IDisposable
{
private Timer _timer1 = new Timer();
private Timer _timer2 = new Timer()
//more of your stuff
~MyPictureBox ()
{
Dispose(false);
}
protected override void Dispose(bool disposing)
{
//clean up unmanaged here
if(disposing)
{
_timer1.Dispose();
_timer2.Dispose();
}
base.Dispose(disposing);
}
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
}
请参见处置模式:
在使用PictureBox时,请记住图像类型也必须是可识别的。工作起来就像一个奇迹。快速清晰的回答。谢谢提示:如果您使用的是类似UserControls的sth,则*.designer.cs文件中已存在“protected override void Dispose(bool disposing)”方法。请随意将其移动到*.cs文件,它不在设计器文件的“Component Designer generated code”(组件设计器生成代码)区域中。工作起来就像一个奇迹。快速清晰的回答。谢谢提示:如果您使用的是类似UserControls的sth,则*.designer.cs文件中已存在“protected override void Dispose(bool disposing)”方法。请随意将其移动到*.cs文件,它不在设计器文件的“组件设计器生成的代码”区域中。