1

情况是这样的:我的应用程序中有一个 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)都不会显示。(我也知道该应用程序无法在前台运行以显示通知)。(我知道通知有效,因为我可以让它在其他情况下工作)。

基本上,我的问题是:如何在最终用户定义的特定时间触发通知?

4

4 回答 4

1
Line 1 : DateTime now = DateTime.Now;
Line 2 : DateTime? get = timePicker1.Value;

在 中Line 1,你得到系统当前的日期时间,“现在”是日期时间而不是空值。但是在 中Line 2,“get”是可以为空的变量,并且您正在获取 timepicker.value 并将日期时间与时间进行比较。我不知道您有什么异常,但是通过 2 次额外检查,您可以获得更安全的代码

  1. “获取”的空值检查
  2. 确保在您的开发环境中,您可以将日期时间与时间值进行比较。
于 2012-12-30T05:32:05.287 回答
1

首先,如果应用程序在前台运行,则不会显示 Toast 通知。它应该只在后台代理或应用程序在锁屏下运行时使用。
其次,如果您的目标是在一天中的选定时间显示通知,那么您不能比较 DateTime 值,而是比较 TimeOfDay 部分。还要通过检查“get.HasValue”确保用户输入了有效值

于 2012-12-30T17:02:50.320 回答
0

你必须记住,Date.Now有一个完整的时间和日期!

因此,与get变量相比,您必须忽略 Date 部分,否则可能不起作用。

尝试改变你if的样子:

if (get.HasValue && now.TimeOfDay == get.Value.TimeOfDay)
{
    // your remaining code
}

此外,ShellToast 类仅适用于后台服务,不适用于前台应用程序(请查看此处的备注)!

如果您想在您的应用程序中显示 Toast,请使用Coding4Fun Toolkit中的 Toast Prompt 。

于 2012-12-30T12:48:48.293 回答
0

您可以比较两个日期时间的日、月、年值。如果您想更精确,请考虑分钟和秒(因为我不知道您要比较值的详细程度)。

如果您想在特定时间收到通知,请尝试使用 Alarm 类

于 2013-03-22T14:37:37.363 回答