gpt4 book ai didi

c# - 循环触发一次通知

转载 作者:行者123 更新时间:2023-11-30 21:43:59 25 4
gpt4 key购买 nike

我有一个每 10 秒运行一次的循环,它会执行一些操作。它所做的一件事是,当我向应用程序的用户发送一条消息时,它会启用一个按钮。我想在该按钮启用时向系统托盘发送通知,但出于显而易见的原因,我只希望在用户有未读广播时触发一次通知。

这是我的代码:

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

一旦计数不为零,该按钮就会启用。我有一个从数据库中激活的广播 ID 列表,我还有一个缓存文件,记录了用户已读取的广播 ID。

我正在寻找一种解决方案,该解决方案仅在按钮处于事件状态且存在用户未阅读的广播时才运行通知。

最佳答案

将您的 string 广播包装在一个简单的类型中:BroadcastMessage。添加一个 bool IsRead 标志。

标记IsRead = true,消息将被以下逻辑忽略。

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

然后您可以稍后为用户添加一个功能来将消息标记为未读

如果您打算将此数据保存在数据库中,则消息和标志都可以存储在 BroadcastMessage 对象中。当用户阅读消息并且对象被标记为已读时,用更改更新数据库。

更新:基于评论中的澄清
bool IsNotified 标志添加到 BroadcastMessage 通知并检查 !msg.IsNotified 而不是 !msg .IsRead.

关于c# - 循环触发一次通知,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41151144/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com