private void buttonLoad_Click(object sender, RoutedEventArgs e) { ActivityPlaceInfo placeInfo = this.listBoxPlace.SelectedValue as ActivityPlaceInfo; if (placeInfo == null) { MessageBox.Show("请选择要生成监测预案的区域"); return; } PlaceFreqPlan[] placeFreqPlans = PT_BS_Service.Client.Framework.BeOperationInvoker.Invoke <I_CO_IA.FreqStation.I_CO_IA_FreqStation, PlaceFreqPlan[]>(channel => { return(channel.GetPlaceFreqPlans(placeInfo.Guid)); }); if (placeFreqPlans != null && placeFreqPlans.Length > 0) { EquipmentClassFreqPlanningSelectWindow wnd = new EquipmentClassFreqPlanningSelectWindow(); wnd.DataContext = placeFreqPlans; if (wnd.ShowDialog(this) == true) { List <MonitorPlanInfo> monitorPlanList = new List <MonitorPlanInfo>(); PlaceFreqPlan[] selectedFreqPlans = placeFreqPlans.GetCheckedItems(); if (selectedFreqPlans.Length > 0) { if (MessageBox.Show("是否合并交叠及相邻频段", "合并提示", MessageBoxButton.YesNo) == MessageBoxResult.Yes) { Array.Sort(selectedFreqPlans, (one, other) => { var result = one.MHzFreqFrom.CompareTo(other.MHzFreqFrom); if (result == 0) { return(other.MHzFreqTo.CompareTo(one.MHzFreqTo)); } return(result); }); MonitorPlanInfo monitorPlan = this.CreateMonitorPlan(selectedFreqPlans[0], placeInfo); monitorPlanList.Add(monitorPlan); for (int i = 1; i < selectedFreqPlans.Length; i++) { if (selectedFreqPlans[i].MHzFreqFrom > monitorPlan.MHzFreqTo) { monitorPlan = this.CreateMonitorPlan(selectedFreqPlans[i], placeInfo); monitorPlanList.Add(monitorPlan); } else { if (selectedFreqPlans[i].MHzFreqTo > monitorPlan.MHzFreqTo) { monitorPlan.MHzFreqTo = selectedFreqPlans[i].MHzFreqTo; } if (!string.IsNullOrWhiteSpace(monitorPlan.Comments)) { monitorPlan.Comments = string.Format("{0},{1}", monitorPlan.Comments, selectedFreqPlans[i].Name); } else { monitorPlan.Comments = selectedFreqPlans[i].Name; } } } } else { for (int i = 0; i < selectedFreqPlans.Length; i++) { monitorPlanList.Add(this.CreateMonitorPlan(selectedFreqPlans[i], placeInfo)); } } PT_BS_Service.Client.Framework.BeOperationInvoker.Invoke <I_CO_IA.MonitorTask.I_CO_IA_MonitorTask>(channel => { channel.SaveMonitorPlans(monitorPlanList.ToArray()); }); var locationFreqPlans = this.dataGridMonitorPlan.ItemsSource as ObservableCollection <MonitorPlanInfo>; foreach (var freqPlan in monitorPlanList) { locationFreqPlans.Add(freqPlan); } } } } else { MessageBox.Show("该地区没有频率保障方案,无法生成监测预案"); } }
private void buttonAdd_Click(object sender, RoutedEventArgs e) { var placeInfo = this.DataContext as ActivityPlaceInfo; if (placeInfo == null) { return; } if (string.IsNullOrWhiteSpace(placeInfo.Graphics)) { MessageBox.Show("选择区域没有绘制范围,请先绘制区域范围"); return; } var freqPlanList = this.dataGridFreqRange.ItemsSource as IList <PlaceFreqPlan>; if (freqPlanList == null) { return; } if (this.freqRanges == null) { this.freqRanges = CO_IA.Client.Utility.GetEquipmentClassFreqRanges(); } string[] freqRangeGuids = (from data in freqPlanList select data.Key).ToArray(); EquipmentClassFreqPlanningSelectWindow wnd = new EquipmentClassFreqPlanningSelectWindow(); var selectableFreqRanges = from data in this.freqRanges where !freqRangeGuids.Contains(data.Key) select data; wnd.DataContext = selectableFreqRanges; if (wnd.ShowDialog(this) == true) { var checkedFreqRanges = wnd.GetCheckedFreqPlans(); if (checkedFreqRanges.Length > 0) { var calculateDistances = (from data in checkedFreqRanges where !this.dicDistanceRangPoints.ContainsKey(data.mDistanceToActivityPlace) select data.mDistanceToActivityPlace).Distinct().ToArray(); if (calculateDistances.Length > 0) { this.Busy("正在计算周围台站查询区域"); System.Threading.SynchronizationContext syncContext = System.Threading.SynchronizationContext.Current; EventWaitHandle[] waitHandles = new EventWaitHandle[calculateDistances.Length]; for (int i = 0; i < waitHandles.Length; i++) { waitHandles[i] = new AutoResetEvent(false); } Action <int[], ActivityPlaceInfo, EventWaitHandle[]> action = new Action <int[], ActivityPlaceInfo, EventWaitHandle[]>(this.CalculateExtendPolygon); action.BeginInvoke(calculateDistances, placeInfo, waitHandles, obj => { var handles = obj.AsyncState as WaitHandle[]; WaitHandle.WaitAll(handles); syncContext.Send(arg => { this.Idle(); this.AddPlaceFreqPlans(checkedFreqRanges, placeInfo); }, null); }, waitHandles); } else { this.AddPlaceFreqPlans(checkedFreqRanges, placeInfo); } } } }