因此,当我关闭表单时,我正在处理许多对象.即使它可能会自动处理它.但我仍然倾向于遵循处理中的"规则",希望它会坚持并帮助防止错误.
所以这就是我目前处理的方式,哪个有效.
if (connect == true)
{
Waloop.Dispose();
connect = false;
UninitializeCall();
DropCall();
}
if (KeySend.Checked || KeyReceive.Checked)
{
m_mouseListener.Dispose();
k_listener.Dispose();
}
if (NAudio.Wave.AsioOut.isSupported())
{
Aut.Dispose();
}
if (Wasout != null)
{
Wasout.Dispose();
}
if (SendStream != null)
{
SendStream.Dispose();
}
Run Code Online (Sandbox Code Playgroud)
所以基本上,首先是如果一个博尔是真的,意味着如果它不是那些可以被忽略,因为它们没有被我想到.
其他的只是让我处理的方法,如果在那里.但这不是一个非常好的方式,我希望它有一个大功能,意思.
处置,如果没有处置.或者其他的东西.我知道他们中的许多都有"被处置"的布尔,所以如果我可以检查每个对象,并且如果它是假的则应该可以处理.
如何使用辅助方法来获取实现IDisposable为params的对象?
void DisposeAll(params IDisposable[] disposables)
{
foreach (IDisposable id in disposables)
{
if (id != null) id.Dispose();
}
}
Run Code Online (Sandbox Code Playgroud)
如果要处置多个对象,请使用要处置的任何对象调用该方法.
this.DisposeAll(Wasout, SendStream, m_mouseListener, k_listener);
Run Code Online (Sandbox Code Playgroud)
如果你想避免将它们称为明确,那么将它们全部存储在List<>:
private List<IDisposable> _disposables;
void DisposeAll() {
foreach(IDisposable id in _disposables) {
if(id != null) id.Dispose();
}
}
Run Code Online (Sandbox Code Playgroud)