【发布时间】:2021-06-08 12:07:04
【问题描述】:
我有数据,我想将其呈现给用户,而他不需要刷新页面。 我正在使用这样的 Asp .net core SignalR:
using System.Threading;
using Microsoft.AspNetCore.SignalR;
using WSEP212.DomainLayer;
namespace WebApplication.Publisher
{
public class ChartNotifications : Hub
{
// Create the instance of ChartDataUpdate
// Send Data every 1 seconds
readonly int _updateInterval = 1000;
//Timer Class
private Timer _timer;
private volatile bool _sendingChartData = false;
private readonly object _chartUpateLock = new object();
PieChart pieChart = new PieChart();
public ChartNotifications() {}
public void InitChartData()
{
//Show Chart initially when InitChartData called first time
pieChart.SetPieChartData();
sendChartData(pieChart);
//Call GetChartData to send Chart data every chosen interval
GetChartData();
}
public void GetChartData()
{
_timer = new Timer(ChartTimerCallBack, null, _updateInterval, _updateInterval);
}
private void ChartTimerCallBack(object state)
{
if (_sendingChartData)
{
return;
}
lock (_chartUpateLock)
{
if (!_sendingChartData)
{
_sendingChartData = true;
pieChart.SetPieChartData();
sendChartData(pieChart);
_sendingChartData = false;
}
}
}
public async void sendChartData(PieChart chart)
{
await Clients.All.SendAsync("updateChart", chart.GetPieChartData());
}
}
}
但我得到一个错误 -> System.ObjectDisposedException:无法访问已处置的对象。 对象名称:'ChartNotifications'。
在客户端它看起来像这样:
chartConnection.start().then(() => {
console.log("chart connection started");
chartConnection.invoke('InitChartData');
});
你能告诉我我做错了什么吗?或任何其他使用 signalR 来完成此任务的想法? 我是新手,所以请您详细说明您的答案。
提前谢谢你!!
【问题讨论】:
标签: c# asp.net-core model-view-controller timer signalr