void INovaAlertService.DoTslTask(int phoneNumberId, eTslStatusType type) { var task = new TslTask() { Client = GetClient(), Type = type }; var uv = _resources.UnitPhones.Where(u => u.PhoneNumberId == phoneNumberId).FirstOrDefault(); if (uv == null) { return; } else { task.Unit = uv.UnitPhone; } var ts = new ThreadStart(() => DoTaskThread(task)); var thread = new Thread(ts); thread.SetApartmentState(ApartmentState.STA); thread.IsBackground = true; thread.Start(); }
void DoTaskThread(TslTask task) { var modem = _resources.Modem; if (modem.SelectedPanelId != task.Client.Id) { return; } var sm = CreateServerModem(modem); try { _currentServerModem = sm; var result = new TslResult(); // false; if (task.Type == eTslStatusType.Prepare) { result = sm.SendPrepareCommand(task.Unit); } else { result = sm.SendAndReceiveResult(task.Unit); } var status = result.TslStatus; if (sm.IsCanceled) { status = eTslStatus.Canceled; } TslRepository.Instance.UpdateStatus(task.Unit.PhoneNumberId, task.Type, status); NotifyTslStatusChanged(task.Unit.PhoneNumberId, task.Type, status, task.Client.Id); _currentServerModem = null; } catch (Exception ex) { task.Client.Callback.OnServerMessage(eServerMessageType.Error, ex.Message); LogService.Logger.Error(ex); } }