示例#1
0
        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("该地区没有频率保障方案,无法生成监测预案");
            }
        }
示例#2
0
        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);
                    }
                }
            }
        }