c# - 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
}
好的,我已经尽量说清楚了。很抱歉冗长的解释。有什么办法可以做我想做的吗?我不想展示我所有的代码,因为我只是跳进去了,我确信一切都是一团糟,我不想让人们分心,只想专注于这一件事。非常感谢您提供帮助!
解决方案
您想为两个班级共享同一个时钟。
至少有两种方法可以做到这一点。
- 简单的方法,但以后很难重构:主窗体触发时调用
TimedEvent
。TextStats
OnTimedEvent
要实现它,您需要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();
}
- 将时钟注入
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 );
}
推荐阅读
- pandas - 比较两个巨型数据框
- snowflake-cloud-data-platform - 雪管支持从 GCS(谷歌云存储)外部阶段加载数据
- vagrantfile - Building the RISC-V GNU toolchain - recommended Vagrant configuration?
- reactjs - Material-table #1204 - 如何自定义 Groupbar 中的字体,React js 中的分页 - 材质表
- sql-server - 如何获得每个直线经理对每个员工的最短日期
- vue.js - Algolia Vue Instant Search – 切换类正在重置属性
- flutter - 如何在 Android Studio 中运行 Dart 程序而不运行模拟器/模拟器
- javascript - 在引导程序 4 中隐藏范围输入按钮?
- activemq - ActiveMQ 的连接池
- android - Firebase 异常:对象不存在