我不确定这是否是一个好主意,这可能最终会成为更多的学术练习,所以请耐心等待:
假设我正在制作一个 UserControl(就像我一样),它将每隔 X 秒(使用 Timer)查找一个文本文件并在此 UserControl 中显示该信息。我们将此控件称为 MyUserControl。
重新散列基本信息:
我会将这个 Timer 作为该控件的成员变量,并且代码如下所示:
this.timer1.Tick += new System.EventHandler(this.timer1_Tick);
还有一个如下所示的事件处理程序方法:
private void timer1_Tick(object sender, EventArgs e)
{
// Read text-file and do lots of goodness.
}
很酷,所以现在我可以将 MyUserControl 的公共属性设置为某个经过的时间,并且只需将这个控件放在我的表单上,我就有一个不错的小控件更新自身。整洁的。
这是让我好奇的事情:
我要把它放在上面的表格已经有一个计时器。那么为什么有两个相互竞争的计时器呢?我希望有一种方法让 MyUserControl 只在需要时使用它的内部计时器(例如,将它放在另一个还没有计时器的表单上)。
我想我可以在这里公开 MyUserControl timer1_Tick:
public void timer1_Tick(object sender, EventArgs e)
{
// Read text-file and do lots of goodness.
}
然后,因为这些东西是多播的,所以在这里做这样的事情:
this.theFormTimer.Tick += new System.EventHandler(this.theFormTimer_Tick);
this.theFormTimer.Tick += new System.EventHandler(MyUserControlObject.timer1_Tick);
并且还将 MyUserControl 的成员变量设置为不启用自身。
但是有没有更巧妙的方法来做到这一点?我能否以某种方式确定 MyUserControl 中的事件处理程序方法已连接到 Form Timer 的滴答事件?或者使用其他类型的方法而不是我建议的方法?
谢谢!(抱歉,如果这最终是重复的,我的 google-fu 今天可能很糟糕)