private void statusBackgroundWorker_RunWorkerCompleted(object sender, System.ComponentModel.RunWorkerCompletedEventArgs e)
 {
     ListViewItem[] items = e.Result as ListViewItem[];
     if (items == null)
     {
         label4.Text = "No results";
         return;
     }
     ListViewGroup lvgroup = new ListViewGroup();
     statusListView.BeginUpdate();
     int running = 0, succeeded = 0, stopped = 0, failed = 0;
     for (int i = 0; i < items.Length; i++)
     {
         if (lvgroup.Header != items[i].Text)
         {
             lvgroup = new ListViewGroup(items[i].Text);
             statusListView.Groups.Add(lvgroup);
             lvgroup.SetCollapsible(true);
         }
         items[i].Group = lvgroup;
         statusListView.Items.Add(items[i]);
     #if NET_35_OR_GREATER
         switch (((CorrelatedTaskEvent)items[i].Tag).RunResult)
         {
             case CorrelatedTaskEvent.Status.StillRunning:
                 running++;
                 break;
             case CorrelatedTaskEvent.Status.Success:
                 succeeded++;
                 break;
             case CorrelatedTaskEvent.Status.Failure:
                 failed++;
                 break;
             case CorrelatedTaskEvent.Status.Terminated:
                 stopped++;
                 break;
             default:
                 break;
         }
     #endif
     }
     statusListView.EndUpdate();
     statusListView.UseWaitCursor = false;
     label4.Text = string.Format(label4.Tag.ToString(), items.Length, running, succeeded, stopped, failed);
 }