//---------------------------------------------------------------------------------- // This is the actual work ... //---------------------------------------------------------------------------------- private void bgwProgress_DoWork(object sender, DoWorkEventArgs e) { BackgroundWorker worker = sender as BackgroundWorker; SetText("Start work"); string testHostPort = ""; string testTopic = ""; int totalItems = 0; int itemsDone = 0; this.txtHostPort.Dispatcher.Invoke(new Action(() => { testHostPort = txtHostPort.Text; })); this.txtTopic.Dispatcher.Invoke(new Action(() => { testTopic = txtTopic.Text; })); totalItems = sonicTestGroup.TestCollection.Count; try { foreach (SonicTest st in sonicTestGroup.TestCollection) { SetText("Testing: " + st.testName); if (worker.CancellationPending == true || cancelTestRun) { e.Cancel = true; break; } else { // Report progress... itemsDone++; System.Threading.Thread.Sleep(500); (sender as BackgroundWorker).ReportProgress(((itemsDone / totalItems) * 100), null); SetText("Progress: " + (itemsDone).ToString() + " out of " + (totalItems).ToString()); } //-------------- Build the Sonic Message Request Doc ------------------ //System.IO.File.WriteAllText(st.testName + ".xml", st.testXML); XmlDocument doc = buildSonicMessage(st.testXML); //------------ Request Doc is built -- Now Send on Sonic ----------------------- MessageSender sonicSender = new MessageSender(testHostPort, testTopic); XmlDocument response = MessageSender.createDocument(); response = sonicSender.send(doc); //------------ Response Received -- Now Process the Response ------------------- SonicTestResult str = new SonicTestResult(); str.TestTime = DateTime.Now.ToString(); str.TestName = st.testName; str.TestResult = response.InnerXml; sr.resultCollection.Add(str); // - TODO: Get the UI thread to update the TreeView ... SetResultTree(str); //TreeViewItem tvi = new TreeViewItem(); //tvi.Header = str.TestName; //TreeViewItem tv2 = new TreeViewItem(); //tv2.Header = str.TestResult; //tvi.Items.Add(tv2); //this.treeResults.Dispatcher.Invoke(new Action(() => { treeResults.Items.Add(tvi); })); //treeResults.Items.Add(tvi); //txtResponse.Text = response.InnerXml; //XmlTextWriter writer = new XmlTextWriter(Console.Out); //writer.Formatting = Formatting.Indented; //response.WriteTo(writer); //writer.Flush(); //Console.WriteLine(); //Console.ReadLine(); } } catch (Exception ex) { SetText(ex.ToString()); } cancelTestRun = false; this.btnRunTest.Dispatcher.Invoke(new Action(() => { btnRunTest.IsEnabled = true; })); this.btnCancelTestRun.Dispatcher.Invoke(new Action(() => { btnCancelTestRun.IsEnabled = false; })); }
private void SetResultTree(SonicTestResult str) { this.Dispatcher.Invoke(new System.Action(() => { TreeViewItem tvi = new TreeViewItem(); tvi.Header = str.TestName; TreeViewItem tv2 = new TreeViewItem(); tv2.Header = str.TestResult; tvi.Items.Add(tv2); treeResults.Items.Add(tvi); })); }