临近截止日期时发出 C# 警报

问题描述 投票:0回答:2

好吧,我有一个存储记录并执行各种其他功能的应用程序,我希望能够实现一种创建某种警报系统的方法,当截止日期(与任何记录一起存储)临近时,它会告诉我/用户。不确定这是否可行,但任何意见或建议将非常感谢。

c# date ms-access-2007 alert deadlines
2个回答
2
投票

您可以启动一个单独的任务,以非阻塞方式永远迭代一堆记录,并检查是否需要采取某些操作。这是一个可运行的 WPF 示例,供您打开这个概念。我认为您可以弄清楚如何将其应用到您的特定需求。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
using System.Windows;

namespace WpfApplication
{
    public partial class MainWindow : Window
    {
        private readonly List<MyEvent> _myEvents;

        public MainWindow()
        {
            InitializeComponent();
            DataContext = this;

            // Add some dummy events occuring on specific time
            _myEvents = new List<MyEvent>()
                {
                    new MyEvent("My event A", DateTime.Now.AddSeconds(5)),
                    new MyEvent("My event B", DateTime.Now.AddSeconds(10)),
                    new MyEvent("My event C", DateTime.Now.AddSeconds(20))
                };

            // Fire up the event iterator
            Task.Factory.StartNew(() =>
                {
                    while (true)
                    {
                        // Report events' status
                        DateTime now = DateTime.Now;

                        foreach (var myEvent in _myEvents.Where(e => e.Time <= now))
                            System.Diagnostics.Debug.WriteLine(string.Format("Event '{0}' already held", myEvent.Name));

                        foreach (var myEvent in _myEvents.Where(e => e.Time > now))
                        {
                            string notification = "Event '{0}' at '{1}' starting in {2} seconds";
                            TimeSpan timeSpan = myEvent.Time - now;
                            notification = string.Format(notification, myEvent.Name, myEvent.Time, (int)timeSpan.TotalSeconds);
                            System.Diagnostics.Debug.WriteLine(notification);
                        }
                        System.Diagnostics.Debug.WriteLine(new string('-', 15));

                        // Wait for a while before next iteration
                        Thread.Sleep(3000);
                    }
                });
        }
    }

    // Dummy
    public class MyEvent
    {
        public MyEvent()
        {}

        public MyEvent(string name, DateTime time)
        {
            Name = name;
            Time = time;
        }

        public string Name { get; set; }

        public DateTime Time { get; set; }
    }
}

此示例的输出类似于:

Event 'My event A' at '6.3.2014 18:34:02' starting in 4 seconds
Event 'My event B' at '6.3.2014 18:34:07' starting in 9 seconds
Event 'My event C' at '6.3.2014 18:34:17' starting in 19 seconds
---------------
Event 'My event A' at '6.3.2014 18:34:02' starting in 1 seconds
Event 'My event B' at '6.3.2014 18:34:07' starting in 6 seconds
Event 'My event C' at '6.3.2014 18:34:17' starting in 16 seconds
---------------
Event 'My event A' already held
Event 'My event B' at '6.3.2014 18:34:07' starting in 3 seconds
Event 'My event C' at '6.3.2014 18:34:17' starting in 13 seconds
---------------
Event 'My event A' already held
Event 'My event B' at '6.3.2014 18:34:07' starting in 0 seconds
Event 'My event C' at '6.3.2014 18:34:17' starting in 10 seconds
---------------

编码快乐!


1
投票

使用 System.DateTime 你应该能够像这样访问机器的当前日期

DateTime today = DateTime.Today;

您可以定期将其与记录中存储的时间(也许是申请开始?)进行比较,以检查截止日期是否临近。

© www.soinside.com 2019 - 2024. All rights reserved.