内部通知消息控制器异步工作

时间:2014-02-03 13:15:13

标签: c# .net winforms asynchronous notifications

我想在winform应用程序中使用通知程序,通知用户发生的事件。我宁愿不使用NotifyIcon功能,因为可能会有很多消息,我不希望所有消息都显示在我的窗口上。但是宁愿它们显示在我自己的应用程序中。

我希望它能显示

等消息
  1. 连接数据库丢失;
  2. 在数据库中找不到记录器表;
  3. 创建了一个新广告系列;
  4. 如果一次发送多条消息,它应该对消息进行排队。 我希望通知以异步方式运行,这样它就不会阻碍程序的运行。我还想为它设置一个超时,以便在显示例如消息之后消息消失5秒。

    实现此功能的最佳方式是什么?

1 个答案:

答案 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()
}