创建一个根据时间运行的功能

时间:2016-12-16 13:22:58

标签: c# winforms time timer

目前正在开发visual C#中的东西。我现在拥有的是一个从文本框中获取输入的应用程序,当他们点击开始按钮时,程序将运行并获取该信息。我想要做的是检查他们输入的时间,并将其与计算机上的当前时间进行比较,并在时钟到达时间时运行一个函数。这是我一次要运行数周的东西。知道我怎么能这样做吗?或者也许最好的方法呢?如果需要,将提供更多信息。

这是迄今为止的样子: Current Setup

我不确定我是否应该使用标准文本框或其他内容。 谢谢!

编辑: 好吧,我最终没有在C#中创建这个程序。我最终编写了一个批处理文件,该文件利用Robocopy(内置于Windows中)来验证和复制文件。然后我使用了Task Scheduler(也内置在Windows中)来确保批处理文件每天在XX时刻运行。

2 个答案:

答案 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
    }