|
328 | 328 | public string Height { get; set; } = "250px"; |
329 | 329 |
|
330 | 330 | private bool chartInitialized = false; |
| 331 | + private bool _disposed = false; |
331 | 332 |
|
332 | 333 | protected override async Task OnInitializedAsync() |
333 | 334 | { |
|
339 | 340 | { |
340 | 341 | if (firstRender) |
341 | 342 | { |
342 | | - await InitializeChart(); |
343 | | - chartInitialized = true; |
344 | | - await LoadInitialData(); |
| 343 | + try |
| 344 | + { |
| 345 | + await InitializeChart(); |
| 346 | + chartInitialized = true; |
| 347 | + await LoadInitialData(); |
| 348 | + } |
| 349 | + catch (TaskCanceledException) |
| 350 | + { |
| 351 | + // Circuit disconnected, ignore |
| 352 | + } |
| 353 | + catch (Microsoft.JSInterop.JSDisconnectedException) |
| 354 | + { |
| 355 | + // Circuit disconnected, ignore |
| 356 | + } |
345 | 357 | } |
346 | 358 | } |
347 | 359 |
|
348 | 360 | private async void OnNewSpeedHistoryPoint(object? sender, SpeedHistoryEventArgs e) |
349 | 361 | { |
350 | | - if (chartInitialized) |
| 362 | + if (_disposed || !chartInitialized) |
| 363 | + return; |
| 364 | + |
| 365 | + try |
| 366 | + { |
| 367 | + await InvokeAsync(async () => |
| 368 | + { |
| 369 | + if (!_disposed) |
| 370 | + { |
| 371 | + await AddSinglePoint(e.DownloadPoint, e.UploadPoint); |
| 372 | + } |
| 373 | + }); |
| 374 | + } |
| 375 | + catch (TaskCanceledException) |
| 376 | + { |
| 377 | + // Circuit disconnected, ignore |
| 378 | + } |
| 379 | + catch (Microsoft.JSInterop.JSDisconnectedException) |
| 380 | + { |
| 381 | + // Circuit disconnected, ignore |
| 382 | + } |
| 383 | + catch (ObjectDisposedException) |
351 | 384 | { |
352 | | - await InvokeAsync(async () => await AddSinglePoint(e.DownloadPoint, e.UploadPoint)); |
| 385 | + // Component disposed, ignore |
353 | 386 | } |
354 | 387 | } |
355 | 388 |
|
356 | 389 | private async Task InitializeChart() |
357 | 390 | { |
| 391 | + if (_disposed) return; |
| 392 | + |
358 | 393 | int maxPoints = TransactionInfoService.MAX_SPEED_HISTORY_SECONDS / TransactionInfoService.INTERVAL_SPEED_HISTORY_SECONDS; |
359 | 394 | int intervalSeconds = TransactionInfoService.INTERVAL_SPEED_HISTORY_SECONDS; |
360 | 395 | await JS.InvokeVoidAsync("initSpeedChart", maxPoints, intervalSeconds); |
361 | 396 | } |
362 | 397 |
|
363 | 398 | private async Task LoadInitialData() |
364 | 399 | { |
| 400 | + if (_disposed) return; |
| 401 | + |
365 | 402 | var downloadHistory = tis.GetDownloadSpeedsHistoryCopy(); |
366 | 403 | var uploadHistory = tis.GetUploadSpeedsHistoryCopy(); |
367 | 404 |
|
|
388 | 425 |
|
389 | 426 | private async Task AddSinglePoint(SpeedHistory downloadPoint, SpeedHistory uploadPoint) |
390 | 427 | { |
391 | | - var download = new { |
392 | | - time = downloadPoint.time.ToString("HH:mm:ss"), |
393 | | - datetime = downloadPoint.time.ToString("dd/MM/yyyy HH:mm:ss"), |
394 | | - speed = downloadPoint.speed / 1024.0 / 1024.0, |
395 | | - files = downloadPoint.activeFiles |
396 | | - }; |
397 | | - |
398 | | - var upload = new { |
399 | | - time = uploadPoint.time.ToString("HH:mm:ss"), |
400 | | - datetime = uploadPoint.time.ToString("dd/MM/yyyy HH:mm:ss"), |
401 | | - speed = uploadPoint.speed / 1024.0 / 1024.0, |
402 | | - files = uploadPoint.activeFiles |
403 | | - }; |
| 428 | + if (_disposed) return; |
404 | 429 |
|
405 | | - await JS.InvokeVoidAsync("addSpeedChartPoint", download, upload); |
| 430 | + try |
| 431 | + { |
| 432 | + var download = new { |
| 433 | + time = downloadPoint.time.ToString("HH:mm:ss"), |
| 434 | + datetime = downloadPoint.time.ToString("dd/MM/yyyy HH:mm:ss"), |
| 435 | + speed = downloadPoint.speed / 1024.0 / 1024.0, |
| 436 | + files = downloadPoint.activeFiles |
| 437 | + }; |
| 438 | + |
| 439 | + var upload = new { |
| 440 | + time = uploadPoint.time.ToString("HH:mm:ss"), |
| 441 | + datetime = uploadPoint.time.ToString("dd/MM/yyyy HH:mm:ss"), |
| 442 | + speed = uploadPoint.speed / 1024.0 / 1024.0, |
| 443 | + files = uploadPoint.activeFiles |
| 444 | + }; |
| 445 | + |
| 446 | + await JS.InvokeVoidAsync("addSpeedChartPoint", download, upload); |
| 447 | + } |
| 448 | + catch (TaskCanceledException) |
| 449 | + { |
| 450 | + // Circuit disconnected, ignore |
| 451 | + } |
| 452 | + catch (Microsoft.JSInterop.JSDisconnectedException) |
| 453 | + { |
| 454 | + // Circuit disconnected, ignore |
| 455 | + } |
406 | 456 | } |
407 | 457 |
|
408 | 458 | public void Dispose() |
409 | 459 | { |
| 460 | + _disposed = true; |
410 | 461 | tis.NewSpeedHistoryPoint -= OnNewSpeedHistoryPoint; |
411 | 462 | } |
412 | 463 | } |
0 commit comments