2016-12-14 10 views
2

私はいくつかのことを行う10秒ごとに実行されているループを持っています。一つは、アプリのユーザーに送信しているメッセージがあるときにボタンを有効にすることです。そのボタンが有効になっているときに通知をシステムトレイに送信したいのですが、わかりやすい理由から、ユーザーに未読のブロードキャストがあったときにその通知が1回だけトリガーされるようにしたいと思います。ここでループ内で一度だけトリガ通知を送信

は、私が持っているコードは次のとおりです。

private void EnableBroadcasts() 
    { 
     string query = "SELECT COUNT(*) FROM db.broadcasts WHERE broadcast_active = '1'"; 
     int count = StoredProcedures.CountRecordsT4(query); 
     StreamReader re = new StreamReader(@"C:\\Users\\" + Environment.UserName + @"\\appdata\\Local\\Cache\\broadcasts.cache"); 
     List<string> ReadBroadcastList = new List<string>(); 
     List<string> BcastID = BroadcastID(); 
     if (BroadcastCount != count) 
     { 
      string text = re.ReadToEnd(); 
      re.Close(); 
      string[] lines = text.Split('\r'); 
      foreach (string s in lines) 
      { 
       ReadBroadcastList.Add(s); 
      } 
      for (int t = 0; t < ReadBroadcastList.Count(); t++) 
      { 
       ReadBroadcastList[t] = ReadBroadcastList[t].Trim('\n'); 
      } 
      ReadBroadcastList.Remove(""); 
      BroadcastCount = ReadBroadcastList.Count(); 

     } 
     var test = BcastID.Except(ReadBroadcastList).ToList(); 
     int read = test.Count(); 
     if (count != 0) 
     { 
      btnWESBroadcast.Visible = true; 
     } 
     else 
     { 
      btnWESBroadcast.Visible = false; 
     } 

カウントがゼロではありません一度ボタンが有効になります。私はDBからアクティブなブロードキャストIDのリストを持っています。また、ユーザーが読み込んだブロードキャストIDを記録するキャッシュファイルもあります。

ボタンがアクティブで、ユーザーが読んでいないブロードキャストがあるときに通知が実行されるようなソリューションを探しています。

答えて

3

簡易型でstringブロードキャストをラップしてください:BroadcastMessagebool IsReadフラグを追加します。

マークIsRead = trueとなり、メッセージは次のロジックで無視されます。

// pseudo 
if (button.IsEnabled && ReadBroadcastList.Any(msg => !msg.IsRead)) { 
    NotifyTray(); 
} 

次に、あなたが後でメッセージUnreadをマークするユーザーのための機能を追加することができます。

このデータをデータベースに保存する場合は、メッセージとフラグの両方をBroadcastMessageオブジェクトに保存することができます。ユーザーがメッセージを読み取り、そのオブジェクトが読み取り済みとしてマークされている場合は、変更を加えてデータベースを更新します。

更新コメント
に明確に基づいてBroadcastMessage通知にbool IsNotifiedフラグを追加し、!msg.IsRead!msg.IsNotified代わりをご確認ください。

+0

まだ未読メッセージがあるときにループが実行されるたびに通知イベントが発生しませんか? –

+0

はい、これはあなたの質問から希望する動作を理解した方法です。「*通知は、ボタンがアクティブで、ユーザーが読んでいないブロードキャストがあるときに実行されます」* – IAbstract

+0

謝罪、私が探しているのは、ボタンがアクティブになったら通知が1回だけ発生します。 –

関連する問題