/// <summary> /// This submits a bit of SAS code to run PROC IOMOPERATE /// The code is submitted asynchronously, so a cancel dialog is shown /// in case it runs longer than the user wants to wait /// </summary> private void RefreshProcesses() { string connectUrl = string.Format(SpawnerUrl, txtHost.Text, txtPort.Text, txtUser.Text, txtPW.Text); string code = SAS.Tasks.Toolkit.Helpers.UtilityFunctions.ReadFileFromAssembly("SAS.Tasks.SASProcesses.prociomoperate.sas"); code = connectUrl + code; SasSubmitter s = new SasSubmitter(Consumer.AssignedServer); if (!s.IsServerBusy()) { _savedCursor = Cursor.Current; Cursor.Current = Cursors.WaitCursor; s.SubmitSasProgramComplete += handle_SubmitSasProgramComplete; sasJobId = s.SubmitSasProgram(code); // show the Progress dialog with cancel button progressdlg = new SubmitProgressForm(); if (progressdlg.ShowDialog(this) == DialogResult.Cancel) { s.CancelJob(sasJobId); progressdlg = null; } } else MessageBox.Show(string.Format("The server {0} is busy; cannot check server processes.", Consumer.AssignedServer)); }
// Job done! private void handle_SubmitSasProgramComplete(object sender, SubmitCompleteEventArgs args) { // use BeginInvoke to move processing back to UI thread BeginInvoke(new MethodInvoker( delegate() { // Close progress dialog if needed if (progressdlg != null && progressdlg.Visible) { progressdlg.Close(); progressdlg = null; } sasJobId = -1; Cursor.Current = _savedCursor; if (args.Success) { SaveSettings(); AddProcesses(); UpdateKillButton(); } else { // ERROR - provide option to show the SAS log if (DialogResult.Yes == MessageBox.Show("An error occurred while trying to retrieve the list of processes. Would you like to view the error log?", "Error", MessageBoxButtons.YesNo)) { SAS.Tasks.Toolkit.Controls.SASLogViewDialog logView = new SASLogViewDialog("Error log", "PROC IOMOPERATE log:", args.Log); logView.ShowDialog(this); }; } } )); }