/// <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); }