实现分解器把订单分解为单独的商品(c#)
本文还考虑了如何对 Windows 窗体控件进行线程安全调用using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Text;using System.Windows.Forms;using System.Messaging;using System.Xml;using System.Threading;namespace msmq应用{ public partial class Form5 : Form { MessageQueue mq1; String text; delegate void setTextCallBack(String text); public Form5() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { XmlDocument xd = new XmlDocument(); xd.Load("XMLFile1.xml"); if (!MessageQueue.Exists(@".\private$\myPrivate")) { MessageQueue.Create(@".\private$\myPrivate"); } MessageQueue mq = new MessageQueue(@".\private$\myPrivate"); mq.Send(xd); } private void button2_Click(object sender, EventArgs e) { if (!MessageQueue.Exists(@".\private$\myPrivate")) { MessageQueue.Create(@".\private$\myPrivate"); } MessageQueue mq = new MessageQueue(@".\private$\myPrivate"); mq.ReceiveCompleted += new ReceiveCompletedEventHandler(OnMessage); mq.BeginReceive(); if (!MessageQueue.Exists(@".\private$\myPrivate1")) { MessageQueue.Create(@".\private$\myPrivate1"); } mq1 = new MessageQueue(@".\private$\myPrivate1"); mq1.Formatter = new XmlMessageFormatter(new Type[] { typeof(XmlDocument) }); } protected void showRichTextBox1() { this.setText(text); } private void setText(String text) { if (this.richTextBox1.InvokeRequired) { setTextCallBack d = new setTextCallBack(setText); this.Invoke(d, new object[] { text }); } else { this.richTextBox1.Text = text; } } protected void OnMessage(Object source,ReceiveCompletedEventArgs asyncResult) { MessageQueue mq = (MessageQueue)source; mq.Formatter = new XmlMessageFormatter(new Type[] { typeof(XmlDocument) }); System.Messaging.Message message = mq.EndReceive(asyncResult.AsyncResult); XmlDocument xdoc = new XmlDocument(); xdoc = (XmlDocument)message.Body; text = xdoc.DocumentElement.OuterXml.ToString(); Thread newthread = new Thread(new ThreadStart(this.showRichTextBox1)); newthread.Start(); XmlNodeList nodelist; XmlElement root = xdoc.DocumentElement; XmlNode date = root.SelectSingleNode("date"); XmlNode ordernumber = root.SelectSingleNode("ordernumber"); XmlNode id = root.SelectSingleNode("customer/id"); XmlElement customerid = xdoc.CreateElement("customerid"); customerid.InnerText = id.InnerXml; nodelist = root.SelectNodes("/order/orderitems/item"); XmlDocument doc=null; foreach (XmlNode item in nodelist) { doc = new XmlDocument(); doc.LoadXml("<orderitem/>"); XmlElement orderitem = doc.DocumentElement; orderitem.AppendChild(doc.ImportNode(date,true)); orderitem.AppendChild(doc.ImportNode(ordernumber,true)); orderitem.AppendChild(doc.ImportNode(customerid,true)); for (int i = 0; i < item.ChildNodes.Count; i++) { orderitem.AppendChild(doc.ImportNode(item.ChildNodes,true)); } } mq1.Send(doc); } private void button3_Click(object sender, EventArgs e) { if (!MessageQueue.Exists(@".\private$\myPrivate1")) { MessageQueue.Create(@".\private$\myPrivate1"); } MessageQueue mq2 = new MessageQueue(@".\private$\myPrivate1"); mq2.Formatter = new XmlMessageFormatter(new Type[] { typeof(XmlDocument) }); System.Messaging.Message message= mq2.Receive(); XmlDocument doc = new XmlDocument(); doc = (XmlDocument)message.Body; this.richTextBox2.Text = doc.DocumentElement.OuterXml; doc.Save("chenyuan.xml"); } }}
运行结果:
http://chenyuanboygirl.iteye.com/upload/picture/pic/39452/591c31f7-b519-37e1-807a-366959557ef8.bmp
页:
[1]