我一直在做任务(ha)创建一个应用程序,该应用程序将允许用户使用参数计划我们的命令行应用程序。如何创建任务计划程序应用程序
所以在命令行应用程序需要一个XML和“运行为”
所以底线我要么需要创建一个Windows服务或学习如何与Task Scheduler服务已经在包装盒上运行的互动(第1版Xp/2003)
起初我虽然很容易让一个服务运行,当提交一个作业时,计算从现在开始到运行的时间,并设置一个计时器来等待这段时间。这是更好的,然后检查每一分钟是否需要运行。
如果我碰壁了,我已经放弃了我不知道如何与正在运行的Windows服务进行通信。除了可能创建一个包含详细信息的文件,并使用文件观察器来加载该文件并修改计划。
所以根本的问题是我怎么能执行此psedo代码从客户
serviceThatIsRunning.Add(Job)
或者与任务进度ineracting或使用C#3.5
编辑创建的.job文件:
澄清我创建了一个小样本,让我对“纸”的想法
所以我有一个招聘类
public class Job
{
#region Properties
public string JobName { get; set; }
public string JobXML { get; set; }
private Timer _JobTimer;
public Timer JobTimer
{
get
{
return _JobTimer;
}
}
#endregion
public void SetJobTimer(TimeSpan time)
{
if (_JobTimer != null)
{
_JobTimer.Dispose();
}
_JobTimer = new Timer(new TimerCallback(RunJob), null, time, time);
}
private void RunJob(Object state)
{
System.Diagnostics.Debug.WriteLine(String.Format("The {0} Job would have ran with file {1}", JobName, JobXML));
}
public override string ToString()
{
return JobName;
}
public void StopTimer()
{
_JobTimer.Dispose();
}
}
现在我需要创建一个应用程序来容纳这些工作,是不断运行的,这就是为什么我虽然Windows服务,然后一个Windows应用程序,以允许用户使用作业列表。
所以问题是如果我创建一个Windows服务如何与该服务中的方法进行交互,以便我可以更改JobList,添加,删除,更改。
这是我创建的一个小窗口应用程序,用于显示Job类的运行情况。有趣的一点是,如果我正确地做到这一点,我不会将作业添加到列表框中,并且Add方法退出,作业计时器部分仍然运行并且不会被垃圾收集器拾取。
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void btnAddJob_Click(object sender, EventArgs e)
{
Job job = new Job();
job.JobName = txtJobName.Text;
job.JobXML = txtJobXML.Text;
job.SetJobTimer(new TimeSpan(0, 0, Convert.ToInt32(JobTime.Value)));
// ??Even If I don't add the Job to a list or ListBox it seems
// ??to stay alive and not picked up by the GC
listBox1.Items.Add(job);
}
private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
{
if (listBox1.SelectedIndex > -1)
{
Job job = listBox1.Items[listBox1.SelectedIndex] as Job;
txtJobName.Text = job.JobName;
txtJobXML.Text = job.JobXML;
}
}
private void btnRemove_Click(object sender, EventArgs e)
{
Job job = listBox1.Items[listBox1.SelectedIndex] as Job;
job.StopTimer();
listBox1.Items.Remove(job);
}
private void btnCollect_Click(object sender, EventArgs e)
{
GC.Collect();
}
}
为什么选择投票? – Mike 2010-06-12 16:27:41
作为您的日程安排的灵感需要看看http://quartznet.sourceforge.net/,它可以处理许多不同的调度需求。 – 2010-06-17 14:51:33