private void AddAppCtrlRule(string[] values) { try { Client client = clients[listClients.SelectedIndices[0]]; AppCtrlRule rule = new AppCtrlRule(); rule.ProcessPathMatcher = values[0].Equals("Equal") ? IceStringMatcher.Equal : IceStringMatcher.Wildmat; rule.ProcessPath = values[1]; rule.PID = int.Parse(values[2]); rule.ParentPathMatcher = values[3].Equals("Equal") ? IceStringMatcher.Equal : IceStringMatcher.Wildmat; rule.ParentPath = values[4]; rule.ParentPID = int.Parse(values[5]); rule.Verdict = values[6].Equals("Allow") ? IceScanVerdict.Allow : IceScanVerdict.Deny; BackgroundWorker bw = new BackgroundWorker(); bw.DoWork += new DoWorkEventHandler((object sender2, DoWorkEventArgs e2) => { e2.Result = ctrl.AddAppCtrlRule(client, rule); }); bw.RunWorkerCompleted += new RunWorkerCompletedEventHandler((object sender2, RunWorkerCompletedEventArgs e2) => { if (e2.Error != null) { MessageBox.Show(e2.Error.Message, "Error"); return; } BackgroundWorker bw2 = new BackgroundWorker(); bw2.DoWork += new DoWorkEventHandler((object sender3, DoWorkEventArgs e3) => { e3.Result = ctrl.GetAppCtrlRules(client); }); bw2.RunWorkerCompleted += new RunWorkerCompletedEventHandler((object sender3, RunWorkerCompletedEventArgs e3) => { if (e3.Error != null) { MessageBox.Show(e3.Error.Message, "Error"); return; } SetRuleInfo(); SetAppCtrlRulesList(e3.Result as AppCtrlRule[]); }); bw2.RunWorkerAsync(); int ruleId = (int)e2.Result; MessageBox.Show(string.Format("AppCtrl rule with id {0} was added with success.", ruleId), "Success"); }); bw.RunWorkerAsync(); } catch (Exception ex) { MessageBox.Show(ex.Message, "Error"); } }