我想在winform
应用程序中使用通知程序,通知用户发生的事件。我宁愿不使用NotifyIcon
功能,因为可能会有很多消息,我不希望所有消息都显示在我的窗口上。但是宁愿它们显示在我自己的应用程序中。
我希望它能显示
等消息如果一次发送多条消息,它应该对消息进行排队。 我希望通知以异步方式运行,这样它就不会阻碍程序的运行。我还想为它设置一个超时,以便在显示例如消息之后消息消失5秒。
实现此功能的最佳方式是什么?
答案 0 :(得分:0)
正如我所看到的那样,消息至少包含以下字段:
class Message
{
public string message;
public DateTime created;
public Message(string message)
{
this.message = message;
created = DateTime.Now;
}
}
相应地设置属性,构造函数等。
消息队列应该是Queue的专业化:
Queue<Message> queue
那时你必须以某种方式到达队列。您可以使用我讨厌的 singleton ,或者通过控制反转将其作为服务注入(我更喜欢):
class CanSendMessagesToQueue
{
private Queue<Message> queue;
public CanSendMessagesToQueue(Queue<Message> queue)
{
this.queue = queue;
}
public anotherMethod()
{
queue.Enqueue(new Message("Hello world!"));
}
}
然后你需要一个UI控件来从队列中提取这些消息,显示它们并最终在它们过时时删除它们。
该UI控件将按时间间隔(例如,每秒一次)轮询队列以显示/删除消息等等。
注意多线程,每次更改时都必须lock
queue
:
lock(queue)
{
// add or remove messages using Enqueue() or Dequeue()
}