C# 构造函数中以前实例的停止计时器?

C# 构造函数中以前实例的停止计时器?,c#,timer,C#,Timer,我有一个对象foo,里面有一个计时器,我想在重新分配foo后停止它。为了做到这一点,我现在做以下几点 var foo=new MyClass(); //Do stuff.... if (foo!=null){foo.timer.stop();} foo=new MyClass(); 有没有一种方法可以在MyClass构造函数中添加这种逻辑,或者有一种更优雅/更简单的方法 public class MyClass { public Dispatch

我有一个对象
foo
,里面有一个计时器,我想在重新分配
foo
后停止它。为了做到这一点,我现在做以下几点

var foo=new MyClass();

//Do stuff....

if (foo!=null){foo.timer.stop();}

foo=new MyClass();
有没有一种方法可以在MyClass构造函数中添加这种逻辑,或者有一种更优雅/更简单的方法

 public class MyClass
        {
            public DispatcherTimer timer = new DispatcherTimer();
            public MyClass()
            {
                timer.Interval = TimeSpan.FromMilliseconds(100);
                timer.Tick += Timer_Tick;
            }
            private void Timer_Tick(object sender, EventArgs e)
            {
                Console.WriteLine("I tick!!");
            }
        }
您可以使用,在这种情况下,它看起来像:

~MyClass {
    timer.stop();
}

如果要将逻辑放入MyClass构造函数中,可以:

public class MyClass
{
    private readonly DispatcherTimer timer = new DispatcherTimer();

    public MyClass()
    {
        timer.Interval = TimeSpan.FromMilliseconds(100);
        timer.Tick += Timer_Tick;
    }
    
    public MyClass(MyClass oldFoo) : MyClass()
    {
        oldFoo?.StopTimer();
    }
    
    public void StopTimer()
    {
        timer.Stop();
    }
    
    private void Timer_Tick(object sender, EventArgs e)
    {
        Console.WriteLine("I tick!!");
    }
}
重新分配代码变为

var foo = new MyClass();

//Do stuff....

foo = new MyClass(foo);

但我想知道阻止所有老家伙的责任是否真的应该由新创建的MyClass实例来承担。从逻辑的角度来看,似乎创建对象并对其进行处理的代码段也应该负责停止刚刚创建的对象的计时器。因此,我可能倾向于使用您最初的解决方案。

我尝试过,但我认为在GC想要处理对象之前,它不会处理该对象。您可能无法立即实现IDisposable,然后显式调用。DisposeEyes,我可以尝试。问题是,我经常在论坛上听到,强制GC处理对象不是一个好主意。另一方面,我仍然需要在重新分配之前处理对象,这基本上就是我现在正在做的。如果你不愿意等待GC过来收集,我认为如果没有dispose调用,你所要求的是不可能的。但是,据我所知,显式调用对象上的dispose没有问题。您所描述的是一个在所有实例上共享的计时器。制作计时器。现在,您可以在构造函数中放入检查null并停止计时器的代码。