目前正在开发visual C#中的东西。我现在拥有的是一个从文本框中获取输入的应用程序,当他们点击开始按钮时,程序将运行并获取该信息。我想要做的是检查他们输入的时间,并将其与计算机上的当前时间进行比较,并在时钟到达时间时运行一个函数。这是我一次要运行数周的东西。知道我怎么能这样做吗?或者也许最好的方法呢?如果需要,将提供更多信息。
这是迄今为止的样子: Current Setup
我不确定我是否应该使用标准文本框或其他内容。 谢谢!
编辑: 好吧,我最终没有在C#中创建这个程序。我最终编写了一个批处理文件,该文件利用Robocopy(内置于Windows中)来验证和复制文件。然后我使用了Task Scheduler(也内置在Windows中)来确保批处理文件每天在XX时刻运行。
答案 0 :(得分:1)
您可以使用@Equalsk建议的计时器或使用Reactive Extensions(它是一个NuGet包,请参阅https://www.nuget.org/packages/System.Reactive/)并执行以下操作:
var dueTime = DateTime.Parse(TextBox1.Text);
Observable.Timer(dueTime).Subscribe(time =>
{
// do something
});
而不是TextBox
,您应该使用DateTimePicker
。见https://msdn.microsoft.com/en-us/library/ms229631(v=vs.110).aspx
答案 1 :(得分:0)
如果您的任务应该在特定的小时和分钟(而不是秒)运行,您可以编写用户输入xml或数据库的日期和时间。然后,同时,应用程序可以每分钟检查xml /数据库,如果日期/时间正确,它将执行您的方法。
或者,您可以使用System.Timer
类,当用户输入日期和时间时,计算从当前时间到输入的毫秒数,并启动计时器。当时间流逝时,请调用您的方法。
Timer类可以将int32.MaxValue
作为最大间隔,大约是3周半
这是一个计时器使用的例子(非常基本的)
public Timer MyTimer { get; set; }
private void button1_Click(object sender, EventArgs e)
{
DateTime datetime = DateTime.Parse(textBox1.Text);
double ms = datetime.Subtract(DateTime.Now).TotalMilliseconds;
MyTimer = new Timer();
MyTimer.Interval = (int)ms;
MyTimer.Tick += T_Tick;
MyTimer.Start();
}
private void T_Tick(object sender, EventArgs e)
{
MyTimer.Stop();
//call your method here
}