Есть ли смысл использовать lock в приведенном коде? - C#
Формулировка задачи:
Я правильно понимаю, что lock в данном случае не имеет смысла (см.
LostConnectionWithController
)? Это Callback на стороне клиента.[CallbackBehavior(UseSynchronizationContext = false)] public class DataServiceCallback : IDataServiceCallback { private ControllerDisconnectedViewModel _ctrllerDisconnectVm; private static readonly object _lostConnectionWithController = new object(); /// <summary>Потеряно соединение с PLC</summary> public void LostConnectionWithController() { Task.Factory.StartNew(() => { try { lock (_lostConnectionWithController) { DispatcherHelper.UIDispatcher.Invoke(() => { if (!WindowManager.Instance.IsPlcDisconnectedDialogOpened) { _ctrllerDisconnectVm = WindowManager.Instance.OpenControllerDisconnectedDialog(); _ctrllerDisconnectVm.CountdownTimerStopped += ControllerDisconnectVm_CountdownTimerStopped; var main = ServiceLocator.Current.GetInstance<MainViewModel>(); main.IsConnectedWithPlc.State = false; //блокируем частично UI main.IsControllerBusy.State = true; main.UpdateConnectionState(); } else WindowManager.Instance.ResetShutdownCounterDisconnectedDialog(); //Сброс обратного отсчёта }); } } catch (Exception ex) { LogManager.Current.Log.AppendException(ex); } }); } //Таймер во вью модели останавливается, окно "Потеряно соединение с контроллером" закрывается void ControllerDisconnectVm_CountdownTimerStopped(object sender, EventArgs e) { DispatcherHelper.UIDispatcher.Invoke(() => { var controllerDisconnectVm = (ControllerDisconnectedViewModel)sender; controllerDisconnectVm.CountdownTimerStopped -= ControllerDisconnectVm_CountdownTimerStopped; var main = ServiceLocator.Current.GetInstance<MainViewModel>(); main.IsConnectedWithPlc.State = true; //включаем ранее частично заблокированный UI main.IsControllerBusy.State = false; main.UpdateConnectionState(); }); } }
Решение задачи: «Есть ли смысл использовать lock в приведенном коде?»
textual
Листинг программы
DispatcherHelper.UIDispatcher.BeginInvoke(() => { try { } catch (Exception ex) { LogManager.Current.Log.AppendException(ex); } });
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д