Signalr 信号器-从服务器端业务逻辑访问客户端
我需要在服务器上启动一个可能运行几分钟的进程,因此我考虑公开以下集线器方法:-Signalr 信号器-从服务器端业务逻辑访问客户端,signalr,signalr-hub,Signalr,Signalr Hub,我需要在服务器上启动一个可能运行几分钟的进程,因此我考虑公开以下集线器方法:- public async Task Start() { await Task.Run(() => _myService.Start()); } 还有一个Stop()方法,允许客户端停止正在运行的进程,可能是通过取消令牌。我还省略了阻止它在已经运行时启动的代码、错误处理等 此外,长时间运行的进程将收集需要定期广播回客户端的数据,因此我想知道如何使用一个事件—类似这样的事件:- public async
public async Task Start()
{
await Task.Run(() => _myService.Start());
}
还有一个Stop()
方法,允许客户端停止正在运行的进程,可能是通过取消令牌。我还省略了阻止它在已经运行时启动的代码、错误处理等
此外,长时间运行的进程将收集需要定期广播回客户端的数据,因此我想知道如何使用一个事件—类似这样的事件:-
public async Task Start()
{
_myService.AfterDataCollected += AfterDataCollectedHandler;
await Task.Run(() => _myService.Start());
_myService.AfterDataCollected -= AfterDataCollectedHandler;
}
private void AfterDataCollectedHandler(object sender, MyDataEventArgs e)
{
Clients.All.SendData(e.Data);
}
这是一个可接受的解决方案还是有一个“更好”的方法?您不需要使用SignalR来开始工作,您可以使用已有的框架/设计/API应用程序来完成这项工作,并且只对发布子部分使用SignalR 我这样做是为了我当前的客户项目,一个用户开始工作,属于该用户的所有选项卡都使用signalr更新,我使用一个名为signalr.EventAggregatorProxy的out sun库从signalr中提取域。免责声明:我是上述图书馆的作者 编辑:使用.NET客户端时,您的代码将如下所示
public class MyViewModel : IHandle<WorkProgress>
{
public MyViewModel(IEventAggregator eventAggregator)
{
eventAggregator.Subscribe(this);
}
public void Handle(WorkProgress message)
{
//Act on work progress
}
}
公共类MyViewModel:IHandle
{
公共MyViewModel(IEventAggregator事件聚合器)
{
eventAggregator.Subscribe(此);
}
公共无效句柄(工作进度消息)
{
//按工作进度行事
}
}
我的客户机是一个WPF应用程序。您的库是与.Net客户端一起工作还是仅用于javascript客户端?是的,还有一个.Net客户端,