Есть ли смысл использовать 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);
- }
- });
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д