private void CheckedTunersChanged(object sender, ItemCheckEventArgs e)
 {
     using (ClosureGuard guard = new ClosureGuard(delegate { WMILineupListBox.ItemCheck += WMILineupListBox_ItemCheck; }))
     {
         WMILineupListBox.ItemCheck -= WMILineupListBox_ItemCheck;
         List <Device>          checked_tuners      = GetCheckedTuners();
         Dictionary <long, int> lineup_tuner_counts = new Dictionary <long, int>();
         foreach (Device tuner in checked_tuners)
         {
             foreach (Lineup lineup in tuner.WmisLineups)
             {
                 int count = 0;
                 lineup_tuner_counts.TryGetValue(lineup.Id, out count);
                 lineup_tuner_counts[lineup.Id] = count + 1;
             }
         }
         for (int i = 0; i < WMILineupListBox.Items.Count; ++i)
         {
             Lineup wmi_lineup = (Lineup)WMILineupListBox.Items[i];
             if (lineup_tuner_counts.ContainsKey(wmi_lineup.Id))
             {
                 if (lineup_tuner_counts[wmi_lineup.Id] == checked_tuners.Count)
                 {
                     WMILineupListBox.SetItemCheckState(i, CheckState.Checked);
                 }
                 else
                 {
                     WMILineupListBox.SetItemCheckState(i, CheckState.Indeterminate);
                 }
             }
             else
             {
                 WMILineupListBox.SetItemCheckState(i, CheckState.Unchecked);
             }
         }
     }
 }
 private void CheckedTunersChanged(object sender, ItemCheckEventArgs e)
 {
     using (ClosureGuard guard = new ClosureGuard(delegate { WMILineupListBox.ItemCheck += WMILineupListBox_ItemCheck; }))
     {
         WMILineupListBox.ItemCheck -= WMILineupListBox_ItemCheck;
         List<Device> checked_tuners = GetCheckedTuners();
         Dictionary<long, int> lineup_tuner_counts = new Dictionary<long, int>();
         foreach (Device tuner in checked_tuners)
         {
             foreach (Lineup lineup in tuner.WmisLineups)
             {
                 int count = 0;
                 lineup_tuner_counts.TryGetValue(lineup.Id, out count);
                 lineup_tuner_counts[lineup.Id] = count + 1;
             }
         }
         for (int i = 0; i < WMILineupListBox.Items.Count; ++i)
         {
             Lineup wmi_lineup = (Lineup)WMILineupListBox.Items[i];
             if (lineup_tuner_counts.ContainsKey(wmi_lineup.Id))
             {
                 if (lineup_tuner_counts[wmi_lineup.Id] == checked_tuners.Count)
                 {
                     WMILineupListBox.SetItemCheckState(i, CheckState.Checked);
                 }
                 else
                 {
                     WMILineupListBox.SetItemCheckState(i, CheckState.Indeterminate);
                 }
             }
             else
             {
                 WMILineupListBox.SetItemCheckState(i, CheckState.Unchecked);
             }
         }
     }
 }