Есть ли смысл использовать lock в приведенном коде? - C#

Узнай цену своей работы

Формулировка задачи:

Я правильно понимаю, что lock в данном случае не имеет смысла (см.

LostConnectionWithController

)? Это Callback на стороне клиента.
Листинг программы
  1. [CallbackBehavior(UseSynchronizationContext = false)]
  2. public class DataServiceCallback : IDataServiceCallback
  3. {
  4. private ControllerDisconnectedViewModel _ctrllerDisconnectVm;
  5. private static readonly object _lostConnectionWithController = new object();
  6. /// <summary>Потеряно соединение с PLC</summary>
  7. public void LostConnectionWithController()
  8. {
  9. Task.Factory.StartNew(() =>
  10. {
  11. try
  12. {
  13. lock (_lostConnectionWithController)
  14. {
  15. DispatcherHelper.UIDispatcher.Invoke(() =>
  16. {
  17. if (!WindowManager.Instance.IsPlcDisconnectedDialogOpened)
  18. {
  19. _ctrllerDisconnectVm = WindowManager.Instance.OpenControllerDisconnectedDialog();
  20. _ctrllerDisconnectVm.CountdownTimerStopped +=
  21. ControllerDisconnectVm_CountdownTimerStopped;
  22. var main = ServiceLocator.Current.GetInstance<MainViewModel>();
  23. main.IsConnectedWithPlc.State = false; //блокируем частично UI
  24. main.IsControllerBusy.State = true;
  25. main.UpdateConnectionState();
  26. }
  27. else
  28. WindowManager.Instance.ResetShutdownCounterDisconnectedDialog();
  29. //Сброс обратного отсчёта
  30. });
  31. }
  32. }
  33. catch (Exception ex)
  34. {
  35. LogManager.Current.Log.AppendException(ex);
  36. }
  37. });
  38. }
  39. //Таймер во вью модели останавливается, окно "Потеряно соединение с контроллером" закрывается
  40. void ControllerDisconnectVm_CountdownTimerStopped(object sender, EventArgs e)
  41. {
  42. DispatcherHelper.UIDispatcher.Invoke(() =>
  43. {
  44. var controllerDisconnectVm = (ControllerDisconnectedViewModel)sender;
  45. controllerDisconnectVm.CountdownTimerStopped -= ControllerDisconnectVm_CountdownTimerStopped;
  46. var main = ServiceLocator.Current.GetInstance<MainViewModel>();
  47. main.IsConnectedWithPlc.State = true; //включаем ранее частично заблокированный UI
  48. main.IsControllerBusy.State = false;
  49. main.UpdateConnectionState();
  50. });
  51. }
  52. }

Решение задачи: «Есть ли смысл использовать lock в приведенном коде?»

textual
Листинг программы
  1.       DispatcherHelper.UIDispatcher.BeginInvoke(() =>
  2.       {
  3.         try
  4.         {
  5.  
  6.         }
  7.         catch (Exception ex)
  8.         {
  9.           LogManager.Current.Log.AppendException(ex);
  10.         }
  11.       });

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

11   голосов , оценка 3.909 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут