情况就是这样:我的应用程序中有一个TimePicker。我希望用户能够使用TimePicker选择时间,然后应用程序将在使用TimePicker输入的时间向用户发送通知。我正在用C#编写Windows Phone应用程序。到目前为止,这是我的代码(我不认为这是正确的)
DateTime now = DateTime.Now;
DateTime? get = timePicker1.Value;
if (now == get)
{
ShellToast toast = new ShellToast();
toast.Title = "Title";
toast.Content = "The Time Has Come!";
toast.Show();
}
但每次运行代码时,它都会给我一个异常,应用程序根本不会加载,并且每次通知(toast)都不会显示。 (我也知道应用程序无法在前台运行以显示通知)。 (我知道通知有效,因为我可以让它与其他情况一起工作)。
基本上,我的问题是:如何在最终用户定义的特定时间触发通知?
答案 0 :(得分:1)
Line 1 : DateTime now = DateTime.Now;
Line 2 : DateTime? get = timePicker1.Value;
在Line 1
中,您获得系统当前日期时间,“now”是日期时间而非空。
但在Line 2
中,“get”是null-able变量,您将获得timepicker.value并将日期时间与时间进行比较。
我不知道你有什么例外但是通过2次额外检查可以获得更安全的代码
答案 1 :(得分:1)
首先,如果应用程序在前台运行,则Toast通知将不会显示。它应仅用于后台代理或应用程序在锁定屏幕下运行时 其次,如果您的目标是在选定的时间显示通知,则不得比较DateTime值,而是TimeOfDay部分。还要确保用户通过选中“get.HasValue”
输入了有效值答案 2 :(得分:0)
你必须记住Date.Now
有一个完整的时间和日期!
因此,与get
变量相比,您必须忽略日期部分,否则可能无效。
尝试将if
更改为如下所示:
if (get.HasValue && now.TimeOfDay == get.Value.TimeOfDay)
{
// your remaining code
}
此外,ShellToast类仅适用于后台服务,而不适用于前台应用程序(请查看备注here)!
如果您想在应用中展示Toast,请使用Coding4Fun Toolkit中的Toast提示。
答案 3 :(得分:0)
您可以比较两个DateTimes的日,月,年值。如果你想要更精确(因为我不知道你想要比较这些值的详细程度),需要花费几分钟和几秒钟。
如果您希望在特定时间收到通知,请尝试using the Alarm class。