我有一个带有计时器的测试中心,可以将日期发送给所有客户端。客户端连接后,它会崩溃并出现以下错误:无法访问已处置的对象。这是错误:System.ObjectDisposedException: Cannot access a disposed object.Object name: 'MyHub'. at Microsoft.AspNetCore.SignalR.Hub.CheckDisposed() at Microsoft.AspNetCore.SignalR.Hub.get_Clients()这是集线器代码:public class MyHub : Hub{ public MyHub() { Program.T = new Timer(TickTimer, null, 1000, 1000); } private void TickTimer(object State) { try { var Time = DateTime.UtcNow.ToString(CultureInfo.InvariantCulture); Console.WriteLine(Time); Clients.All.SendCoreAsync("update", new object[] { Time }); } catch (Exception E) { Console.WriteLine(E); throw; } }}看起来Clients对象已被处理掉,但我不明白为什么。
2 回答

慕莱坞森
TA贡献1810条经验 获得超4个赞
集线器生命周期是每个请求(请参阅https://learn.microsoft.com/en-us/aspnet/core/signalr/hubs?view=aspnetcore-3.1上的注释),因此您会因为访问属性(客户端)而处理异常) 的处置对象。
当您想向集线器外部的客户端发送消息时(并且您在外部,因为对计时器做出反应,因此在 .netcore 集线器生命周期之后)您应该使用 IHubContext(您可以通过 DI 获得),看看在https://learn.microsoft.com/en-us/aspnet/core/signalr/hubcontext?view=aspnetcore-3.1
- 2 回答
- 0 关注
- 92 浏览
添加回答
举报
0/150
提交
取消