首页 > 解决方案 > C#:我的应用程序是否可以共享在我的其他类之一中触发的事件?

问题描述

如果我没有正确解释这一点,请原谅我,我是编程新手,如果可能的话,我不确定它叫什么。

首先让我解释一下我的班级的一些事情。我们将把这个类称为 TextStats。TextStats 类创建一个像这样的计时器:

 private Timer timer;

稍后,这些值在初始化时设置给定时器:

timer = new Timer(1000);
timer.Elapsed += OnTimedEvent;
timer.AutoReset = true;
timer.Enabled = true;

然后我的班级中有一个事件每秒触发一次,如下所示:

    private void OnTimedEvent(object sender, ElapsedEventArgs e)
    {
        Console.WriteLine("Timed event has fired!");
    }

稍后我将向它添加代码,但基本上我正在尝试重构和清理我的主类中的一些代码..

现在,在程序的主类中,我正在为 TextStats 类创建一个实例,我猜它被称为实例:

TextStats textStats = new TextStats();

好的,现在这是我难倒的部分!TextStats 类像我想要的那样触发计时器事件,并将在我的主类的幕后运行所有代码......但是,我也希望能够在我的内部“共享”TextStats 的计时器事件主班。

所以换句话说,我的 TextStats 类仍然像它应该的那样每秒触发一次计时器事件,但我还想以某种方式在我的主类中创建一个事件,我的 TextStats 类中的计时器事件也会触发或共享,或捎带,或依附于......无论这个过程被称为......哈哈。

我想它会是这样的英文形式:

share event OnTimedEvent from textStats and map it to this.TimedEvent;

public void TimedEvent()
{
   //Additional code to run with OnTimedEvent event from class TextStats
}

好的,我已经尽量说清楚了。很抱歉冗长的解释。有什么办法可以做我想做的吗?我不想展示我所有的代码,因为我只是跳进去了,我确信一切都是一团糟,我不想让人们分心,只想专注于这一件事。非常感谢您提供帮助!

标签: c#eventsevent-handling

解决方案


您想为两个班级共享同一个时钟。

至少有两种方法可以做到这一点。

  1. 简单的方法,但以后很难重构:主窗体触发时调用TimedEventTextStatsOnTimedEvent

要实现它,您需要TextStats成为类成员。

    // Make your TextStats as a class member.
    TextStats textStats = new TextStats();
    private void OnTimedEvent(object sender, ElapsedEventArgs e)
    {
        Console.WriteLine("Timed event has fired!");
        textStats.TimedEvent();
    }
  1. 将时钟注入TextStats. 它有点复杂,但更容易重构。
        public class TextStats
        {
            readonly System.Windows.Forms.Timer _tmr;

            public TextStats( System.Windows.Forms.Timer tmr )
            {
                _tmr = tmr;
                tmr.Tick += TimedEvent;
            }

            private void TimedEvent( object sender, EventArgs e )
            {
                // Implementation here
            }
        }

// When instantiating class, put your timer into it
    TextStats _textStats;
    void YourMainFormConstructor(){

         // Timer initialization.
         _textStats = new TextStats( timer );
    }


推荐阅读