C#新手,有关控制在构造函数中创建的计时器的问题

时间:2019-11-27 21:56:47

标签: c# constructor timer

我有一个在构造函数中创建计时器的类。

计时器完全可以执行我需要的操作,但是我也希望能够使用.Stop();。和.Start();在主程序中。

不仅如此,但这足以重现我的确切问题。

在下面的示例中,我可以访问Monsters [index] .M_timer,但是.Stop();出现错误。

class Program
    {
        static void Main(string[] args)
        {
            int index = 0;
            string name = "Spider";
            monster[] Monsters = new monster[100];
            Monsters[index] = Create_Monster(name);
            /*
            Monsters[1].M_timer.Stop(); <- not how I will be using this but I need the functionality here
            */
        }
        public static monster Create_Monster(string _name)
        {
            int timer = 0;
            if (_name == "Spider")
            {
                timer = 4000;
            }
            monster build = new monster(false, timer);
            return build;
        }
    }
class monster
    {
        public bool can_act;
        public int _timer;
        public object M_timer;

        public monster(bool _can_act, int _timer)
        {
            can_act = _can_act;
            Timer M_timer = new Timer();
            M_timer.Interval = _timer;
            M_timer.AutoReset = true;
            M_timer.Enabled = true;
            M_timer.Elapsed += TimerEvent;
        }
        public void TimerEvent(object source, ElapsedEventArgs e)
        {
            can_act = true;
        }
    }

2 个答案:

答案 0 :(得分:1)

乍看之下,您似乎有几个问题。首先是范围。您的构造函数中有一个名为M_timer的变量,它覆盖了类字段M_timer。您没有在此处作用相同的对象。您必须说类似this.M_timer = M_timer.

第二个问题是,由于要使用类字段,因此必须对其进行强制转换,因为它是通用对象。因此您必须说类似((Timer)Monsters[1].M_timer).Stop()

答案 1 :(得分:0)

该死,我应该再给几分钟时间:

公共对象M_timer;

替换为

公共计时器M_timer;