嗨 我有一个计时器控制我的主窗体上创建一个类的实例,在某些情况下类的方法需要停止计时器。访问窗体控件从类C#窗体
有没有办法将定时器Enabled属性设置为false而不通过控制进入方法?
我可以怎么检查计时器的mainform上的所有控件,然后禁用它?
嗨 我有一个计时器控制我的主窗体上创建一个类的实例,在某些情况下类的方法需要停止计时器。访问窗体控件从类C#窗体
有没有办法将定时器Enabled属性设置为false而不通过控制进入方法?
我可以怎么检查计时器的mainform上的所有控件,然后禁用它?
您可以从类中创建一个事件来停止定时器,并在您希望发生此事时将其提升。从外部类(主窗体)启动类后,您订阅该事件并停止处理程序中的计时器。
这是怎么引发事件:
class Class1
{
public event EventHandler StopTimer;
public void SomeMethod()
{
if (StopTimer != null)
StopTimer(this, EventArgs.Empty);
}
}
这就是你必须在主窗体:
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
Class1 myClass = new Class1();
myClass.StopTimer += new EventHandler(myClass_StopTimer);
timer1.Enabled = true;
timer1.Start();
}
void myClass_StopTimer(object sender, EventArgs e)
{
timer1.Stop();
timer1.Enabled = false;
}
}
我有这个类有一个构造函数,要么需要一个接口
interface IStopTimer
{
void StopTimer();
}
class MyClass
{
public MyClass(IStopTimer stopTimer)
...
或委托
class MyClass
{
public MyClass(Action stopTimer)
...
或可能计时器的方法来达到同样的事情。这样这个类不依赖于Windows窗体,并且不知道你用于定时器的是什么。
这样或那样的方法将需要一个引用(直接或间接)的计时器来停止它。你可以对它抽象层,但它不会很漂亮。
您可以使用类似ThreadPool.QueueUserWorkItem()
而不是定时器来启动计时器执行的操作吗?这样当操作完成后,线程将返回到池中,并且您有一个“即忘即忘”机制。
设计听起来有点怪怪的 - 这可能是值得向大家解释了更广阔的背景你试图达到什么样的目标,并要求提供如何简化的建议 - 这将是最好的问题在一个单独的问题 – 2010-11-01 11:47:13