chenyuanboygirl 发表于 2013-2-5 01:49:20

实现分解器把订单分解为单独的商品(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]
查看完整版本: 实现分解器把订单分解为单独的商品(c#)