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();
}

しかし、コードを実行するたびに、例外が発生するか、アプリがまったく読み込まれず、通知 (トースト) が表示されません。(通知を表示するためにアプリをフォアグラウンドで実行できないことも知っています)。(他の状況でも機能させることができるので、通知が機能することはわかっています)。

基本的に、私の質問は次のとおりです。エンド ユーザーが定義した特定の時間に通知をトリガーするにはどうすればよいですか?

4

4 に答える 4

1

まず、アプリがフォアグラウンドで実行されている場合、トースト通知は表示されません。バックグラウンド エージェントで、またはアプリケーションがロック画面で実行されている場合にのみ使用してください。
次に、選択した時刻に通知を表示することが目標の場合は、DateTime 値を比較するのではなく、TimeOfDay 部分を比較する必要があります。また、「get.HasValue」をチェックして、ユーザーが有効な値を入力したことを確認してください。

于 2012-12-30T17:02:50.320 に答える
1
Line 1 : DateTime now = DateTime.Now;
Line 2 : DateTime? get = timePicker1.Value;

ではLine 1、システムの現在の日時を取得します。「現在」は日時であり、null ではありません。しかしLine 2、「get」はnull可能な変数であり、timepicker.valueを取得して日時と時間を比較しています。私はあなたが持っている例外を知りませんが、2つの追加チェックでより安全なコードを持つことができます

  1. 「get」の null チェック
  2. 開発環境で日時と時間の値を比較できることを確認してください。
于 2012-12-30T05:32:05.287 に答える
0

2 つの DateTime の日、月、年の値を比較できます。より正確にしたい場合は、分と秒を考慮してください(値を比較する詳細レベルがわからないため)。

特定の時間に通知を受け取りたい場合は、 Alarm クラスを使用してみてください。

于 2013-03-22T14:37:37.363 に答える
0

Date.Nowフルタイムと日付があることを覚えておく必要があります。

したがって、get変数と比較すると、日付部分を無視する必要があります。そうしないと、おそらく機能しません。

if次のように変更してみてください。

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

また、ShellToast クラスはバックグラウンド サービスでのみ機能し、フォアグラウンド アプリでは機能しません (ここの備考を確認してください)。

アプリでトーストを表示する場合は、Coding4Fun Toolkitのトースト プロンプトを使用します。

于 2012-12-30T12:48:48.293 に答える