Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何向桌面应用程序发送推送通知_C# - Fatal编程技术网

C# 如何向桌面应用程序发送推送通知

C# 如何向桌面应用程序发送推送通知,c#,C#,我有一个驻留在系统托盘中的应用程序,我希望使用推送通知系统,而不是标准的“轮询”方法(每隔X秒检查服务器以获取更新)。因此,当有更新时,所有客户机都会收到一条消息,并执行任务。Web服务器将使用Debian和Apache以及PHP 我的目标平台是.NET3.5,那么该如何实现呢?观测者设计模式将不起作用(因为它是.NET 4.0或更高版本)。您必须创建两个接口及其派生的具体类。您的服务将创建IObservable、IObserver和ApplicationErrorState 您的客户端将创建类

我有一个驻留在系统托盘中的应用程序,我希望使用推送通知系统,而不是标准的“轮询”方法(每隔X秒检查服务器以获取更新)。因此,当有更新时,所有客户机都会收到一条消息,并执行任务。Web服务器将使用Debian和Apache以及PHP


我的目标平台是.NET3.5,那么该如何实现呢?观测者设计模式将不起作用(因为它是.NET 4.0或更高版本)。

您必须创建两个接口及其派生的具体类。您的服务将创建IObservable、IObserver和ApplicationErrorState

您的客户端将创建类并从IObserver派生ErrorMessageSync

下面是我的示例,它显示了错误,是用.NET3.5创建的

p.S.您也可以使用代理

/// It will store observers and will push the message
public interface IErrorObservable
{
  void Attach(IErrorObserver observer);

  void Detach(IErrorObserver observer);

  void Notify();
}

public interface IErrorObserver
{
  void Update(string message);
}

///It is concrete class to push message
public sealed class ApplicationErrorState : IErrorObservable
{
  private List<IErrorObserver> _observers = new List<IErrorObserver>();
 
  ///constructor
  public ApplicationErrorState()
  {
  }

  public void Attach(IErrorObserver observer)
  {
     _observers.Add(observer);
  }

  public void Detach(IErrorObserver observer)
  {
     _observers.Remove(observer);
  }

  public void Notify()
  {
     foreach (IErrorObserver observer in _observers)
     {
        observer.Update(/*Logic*/);
     }
  }

  public void SetError()
  {
     Notify();
  }


  ///COncrete subject 
  private class ErrorMessageSync : IErrorObserver
  {
     private MyClass _parent;
     
     public ErrorMessageSync(MyClass parent)
     {
        _parent = parent;
     }

     public void Update(string message)
     {
            //This work will be done
     }
  }
///它将存储观察者并推送消息
可观察的公共接口
{
无效附加(观察员);
无效分离(观察者);
无效通知();
}
公共接口观察器
{
无效更新(字符串消息);
}
///推送消息是一个具体的类
公共密封类ApplicationErrorState:IErrorObservable
{
私有列表=新列表();
///建造师
公共应用程序错误状态()
{
}
公共无效附加(IError观察员)
{
_添加观察员(观察员);
}
公共无效分离(IErrorObserver)
{
_观察员。移除(观察员);
}
公告
{
foreach(iErrorObservator in_Observators)
{
observer.Update(/*逻辑*/);
}
}
public void SetError()
{
通知();
}
///具体主题
私有类ErrorMessageSync:IErrorObserver
{
私人MyClass(家长);
公共ErrorMessageSync(MyClass父级)
{
_父母=父母;
}
公共无效更新(字符串消息)
{
//这项工作将完成
}
}
这是这种方法的UML


观察者设计模式不起作用(因为它是.NET 4.0或更高版本)。我讨厌当我必须使用.NET 1.1时,因为
单例模式是在.NET 2.0之前才设计的。“观察者设计模式不起作用(因为它是.NET 4.0或更高版本)。”-杰作LOL