/// <summary>
        /// Searches for WaterOneFlow services registered at an HydroServer, and adds info about those services to the data grid view
        /// </summary>
        /// <param name="portalUtils">Object that contains a pointer to the HydroServer chosen by the user</param>
        /// <param name="e">Parameters from the BackgroundWorker</param>
        /// <returns>Parameters (task type, output message, rows to add to view) to be processed by a BackgroundWorker event handler</returns>
        private object[] AddServicesFromHydroServer(HydroServerClient hydroServerClient, DoWorkEventArgs e)
        {
            // Build parameters to pass to the background worker
            object[] parameters = new object[3];
            parameters[0] = BackgroundWorkerTasks.AddServicesFromHydroServer;
            parameters[1] = "Operation cancelled";

            // Get all items registered with the server
            bgwMain.ReportProgress(0, "Getting list of registered services...");
            List <DataServiceInfo> services = (List <DataServiceInfo>)hydroServerClient.GetWaterOneFlowServices();

            // Read the items into rows
            int totalSteps  = services.Count;
            int currentStep = 0;

            List <string[]> rowsToAdd = new List <string[]> ();

            foreach (DataServiceInfo serviceInfo in services)
            {
                if (bgwMain.CancellationPending)
                {
                    e.Cancel = true;
                    return(parameters);
                }

                currentStep++;
                bgwMain.ReportProgress(100 * currentStep / totalSteps, "Reading service info: " + currentStep + " of " + totalSteps + "...");

                // Create an item to add to the data grid view
                rowsToAdd.Add(CreateServiceRow(serviceInfo));
            }

            // Prepare a message to the user
            string message       = "";
            int    servicesAdded = rowsToAdd.Count;

            if (servicesAdded == 0)
            {
                message = "No services found in HydroServer";
            }
            else if (servicesAdded == 1)
            {
                message = "1 service found in HydroServer";
            }
            else
            {
                message = servicesAdded.ToString() + " services found in HydroServer";
            }

            parameters[1] = message;
            parameters[2] = rowsToAdd;

            return(parameters);
        }