我希望SignalR服务器每n秒更新一次仪表板。我现在正在使用这个:
public class MyHub : Hub
{
public override Task OnConnectedAsync()
{
Observable.Interval(TimeSpan.FromSeconds(0.5)).Subscribe(l =>
{
var alt = CalcAltitude(l);
SendMessage(alt);
});
return Task.CompletedTask;
}
private void SendMessage(double alt)
{
Clients.All.SendAsync("SendAction", new Status() {Altitude = alt});
}
private double CalcAltitude(long l)
{
return 100 * Math.Sin((double) l / 100) + 200;
}
}
public class Status
{
public double Altitude { get; set; }
}
执行我的代码时,它将引发一个异常,指出
无法访问已处置的对象
我怀疑我在这里做错了。
那么,及时向所有客户端发送消息的正确方法是什么?
答案 0 :(得分:2)
好的,这次的答案不是来自Stack Overflow,而是来自另一个来源。
这可以通过ASP.NET Core + SignalR Core中的这段代码完成。
您将需要两部分。
非常感谢David Fowler的答复!
答案 1 :(得分:-1)
var hubContext = GlobalHost.ConnectionManager.GetHubContext<MyHub>();
hubContext.Clients.All.SendnewData(Data);
将此代码置于每秒更新或计算数据的位置。
就像:您的数据库过程完成后,广播新数据
using Microsoft.AspNet.SignalR;
using Microsoft.AspNet.SignalR.Infrastructure;
using Microsoft.AspNet.Mvc;
public class TestController : Controller
{
private IHubContext testHub;
public TestController(IConnectionManager connectionManager)
{
testHub = connectionManager.GetHubContext<TestHub>();
testHub.Clients.All.SendnewData(Data);
}
}