在我正在工作的公司中,我们想要构建一个自动化工具,该工具应该运行用文本编写的脚本。我是计时器的新手,我想做的是制作一个foreach
(不是必须的),它将在脚本中逐行运行并调用解析器供以后使用。
我想要的是这样的:
aTimer = new System.Timers.Timer(10000);
// Hook up the Elapsed event for the timer.
// Set the Interval to 2 seconds (2000 milliseconds).
aTimer.Interval = 2000;
aTimer.Enabled = true;
foreach (ScriptCell CELL in ScriptList)
{
//fire the method when time is up
aTimer.Elapsed += new ElapsedEventHandler(DoScriptCommand(CELL.CellText));
}
我知道我所写的内容并没有多少意义,但我在这里是一个无能为力的
PS。在发布此Q之前,我正在寻找其他主题,但我没有发现任何似乎填补空白的内容
答案 0 :(得分:2)
await
的引入使得序列中的每个项目都有效,同时在每个项目之间等待一段时间,非常简单:
foreach(var cell in ScriptList)
{
DoScriptCommand(cell.CellText)
await Task.Delay(TimeSpan.FromSeconds(2));
}
答案 1 :(得分:1)
在经过的事件中执行此操作,而不是每行的新处理程序(否则它们将以并行方式执行)
aTimer.Elapsed += new ElapsedEventHandler((sender, args) =>
{
foreach (ScriptCell CELL in ScriptList)
{
DoScriptCommand(CELL.CellText);
}
}
答案 2 :(得分:0)
如果您只是想定期运行脚本或脚本,我会搜索“cron”,如果您使用的是Unix / Linux机器或“Windows任务计划程序”,如果您使用的是Windows机器。这些工具中的每一个都允许您指定脚本的路径,它们应运行的间隔,要使用的命令行参数等。
答案 3 :(得分:-2)
我在申请中做了一点俄罗斯方块。 我用这个代码的计时器:我希望它会帮助你。 如果你不使用线程,你的程序将在计时器运行时卡住 所以我使用这样的线程:
private void ciz()
{
int beklemeSuresi = 1000;//1000 = 1sec
for (int i = 0; i < 15; i++)
{
if (g != null)
{
g.Clear(Color.AliceBlue);
}
solLCiz(100, 100 + i * 20, yon);
Application.DoEvents();
Thread.Sleep(beklemeSuresi);
}
}
当然你必须在程序开头就开始这样的线程:
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
ciz();
}
private void Form1_Load(object sender, EventArgs e)
{
backgroundWorker1.RunWorkerAsync();
}