Skip to content

Broadcast广播器

Dream.Machine edited this page May 3, 2019 · 12 revisions

广播主要是解决C/S(Winform和WPF都可以)中不同Window,Page,UserControl,ViewModel之间的消息通知。

你可以在任何类中注册广播,也可以在任何类中推送这个广播,注册接收器的地方都会收到广播。

1.单向通知广播(适用于单向广播通知)

步骤1:初始化

在App.cs中 重写 OnStartup

protected override void OnStartup(StartupEventArgs e)
{
    //初始化Broadcast
    Broadcast.Initialize();
}

步骤2:在你需要广播通知的地方注册广播接收器

//注册广播通知
Broadcast.RegisterBroadcast(Type,()=> 
{
    System.Console.WriteLine($"收到广播");
});

//注册广播通知-带参数
Broadcast.RegisterBroadcast<string>(Type,(data)=> 
{
    System.Console.WriteLine($"收到广播:{data}");
});

步骤3:推送广播消息

//推送广播
Broadcast.PushBroadcast(Type);

//推送广播-带参数
Broadcast.PushBroadcast(Type, "Hello world");

步骤4:卸载广播接收器

//卸载广播接收器
Broadcast.UninstallBroadcast(Type);

单向通知广播(推送函数,可以利用Action<T>实现2中的回调函数)

//注册广播接收器
Broadcast.RegisterBroadcast<Action>("T", (action) =>
{
     action();
});

//推送广播
Broadcast.PushBroadcast<Action>("T", () =>
{
     //需要推送的函数
     MessageBox.Show("Test");
});

2.双向广播(发布广播,并发布回调函数,适用于多个数据回传)

//推送广播
Broadcast.PushBroadcast<string,int>(Type, "给我你们的ID?",(value)=> 
{
     System.Console.WriteLine($"收到订阅者消息:{value}");
});

//注册广播接收器X,当前接收器的ID为X
Broadcast.RegisterBroadcast<string, int>(Type, (data, callBack) =>
{
   System.Console.WriteLine($"收到广播:{data}");
   //回发消息,数据类型为int
   callBack(10000);
});