在WinForms(C#)应用程序中,我在运行时创建了几个自定义控件。这些自定义控件称为JobTimers,并继承/扩展标准控件Timer。
public class JobTimer : System.Windows.Forms.Timer
{
private int IntJobID;
public int JobID
{
get{return IntJobID;}
set{IntJobID = value;}
}
}
public static void CreateTimer(int JobID)
{
JobTimer ControlJobTimer = new JobTimer();
ControlJobTimer.Enabled = true;
ControlJobTimer.JobID = JobID;
ControlJobTimer.Interval = 30000;
ControlJobTimer.Tick += new EventHandler(JobTimer_Tick);
ControlJobTimer.Start();
}
类似于我们如何查询表单上的标准或自定义控件的集合 - 我们可以访问/查询这些自定义JobTimer控件的集合吗?
注意:出现此问题的原因是我没有看到这些控件停靠/放置在任何表单中,因此仅存在于程序的内存中。在停止/退出应用程序时,这些控件也消失了。
换句话说,如何获取应用程序中所有计时器的列表以及对其属性的访问权限?
答案 0 :(得分:0)
public static List<JobTimer> _timers;
public class JobTimer : System.Windows.Forms.Timer
{
private int IntJobID;
public int JobID
{
get { return IntJobID; }
set { IntJobID = value; }
}
}
public static void CreateTimer(int JobID)
{
if (_timers == null)
{
_timers = new List<JobTimer>();
}
JobTimer ControlJobTimer = new JobTimer();
ControlJobTimer.Enabled = true;
ControlJobTimer.JobID = JobID;
ControlJobTimer.Interval = 30000;
ControlJobTimer.Tick += new EventHandler(JobTimer_Tick);
ControlJobTimer.Start();
_timers.Add(ControlJobTimer);
}
然后你可以访问全局列表_timers,所有创建的jobtimer实例都将被添加到那里
答案 1 :(得分:0)
这段代码闻起来。来自计时器的派生自定义控件是实现您想要的非常昂贵的方式。您可以使用线程,后台工作程序,订阅/发布模型,而不是更优化。
我们可以访问/查询这些自定义JobTimer控件的集合吗?
简单,当您声明JobTimers在父表单中保持对它们的访问时,例如:
List<JobTimer> jobTimers = new List<JobTimer>();
答案 2 :(得分:0)
正如其他人已经说过的那样,你必须自己保存并保存安全的定时器。没有AllTimers
集合,因此您必须创建和管理一个。
子类化Timer
是个坏主意。这可能是更合适,更容易扩展的版本:
using System.Windows.Forms;
public class JobTimer
{
public Timer Timer {get; set;}
public string ID {get; set;}
}
public List<JobTimer> _timers = new List<JobTimer>();
public static void CreateTimer(int id)
{
var timer = new Timer() { Interval = 30000 };
var job = new JobTimer() { Timer = timer, ID = id };
_timers.Add(job);
timer.Tick += JobTimer_Tick;
timer.Start();
}
public static void DisposeTimers()
{
foreach(var timer in _timers)
timer.Dispose();
}