最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C#使用Microsoft消息隊(duì)列(MSMQ)的示例詳解

 更新時(shí)間:2024年01月05日 08:42:50   作者:rjcql  
Microsoft?Message?Queuing?(MSMQ)?是在多個(gè)不同的應(yīng)用之間實(shí)現(xiàn)相互通信的一種異步傳輸模式,本文主要介紹了C#如何使用Microsoft消息隊(duì)列,需要的可以了解下

寫(xiě)在前面

Microsoft Message Queuing (MSMQ) 是在多個(gè)不同的應(yīng)用之間實(shí)現(xiàn)相互通信的一種異步傳輸模式,相互通信的應(yīng)用可以分布于同一臺(tái)機(jī)器上,也可以分布于相連的網(wǎng)絡(luò)空間中的任一位置。

使用消息隊(duì)列可以實(shí)現(xiàn)異步通訊,無(wú)需關(guān)心接收端是否在線,只需發(fā)出后就可以繼續(xù)處理后續(xù)的任務(wù),通訊雙方也可以是不同的物理平臺(tái),該機(jī)制還可以用來(lái)實(shí)現(xiàn)故障恢復(fù)。

在使用前,需要先確認(rèn)該功能是否安裝和啟用,如未安裝可以參考以下操作步驟:

進(jìn)入控制面板\所有控制面板項(xiàng)\程序和功能,點(diǎn)擊啟用或關(guān)閉Windows功能,勾選Microsoft消息隊(duì)列,確認(rèn)并安裝。

消息隊(duì)列分為以下幾種,每種隊(duì)列的路徑表示形式如下:

公用隊(duì)列 MachineName\QueueName

專(zhuān)用隊(duì)列 MachineName\Private$\QueueName

日記隊(duì)列 MachineName\QueueName\Journal$

計(jì)算機(jī)日記隊(duì)列 MachineName\Journal$

計(jì)算機(jī)死信隊(duì)列 MachineName\Deadletter$

計(jì)算機(jī)事務(wù)性死信隊(duì)列 MachineName\XactDeadletter$

代碼實(shí)現(xiàn) 

需要引用 System.Messaging 類(lèi)庫(kù)

using System.Messaging;

發(fā)送端

    public partial class Form1 : Form
    {
        MessageQueue queue;
        string path = ".\\Private$\\testQueue";
        public Form1()
        {
            InitializeComponent();
            CreateMessageQueue();
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
            SendMessage(this.textBox1.Text);
        }
 
        private void CreateMessageQueue()
        {
            if(MessageQueue.Exists(path))
            {
                queue = new MessageQueue(path);
            }
            else
            {
                queue = MessageQueue.Create(path);
            }
        }
 
        private void SendMessage(string str)
        {
            var message = new System.Messaging.Message();
            message.Formatter = new XmlMessageFormatter(new Type[]{ typeof(string)});
            message.Body = str;
            queue.Send(message);
            MessageBox.Show("消息發(fā)送成功");
        }
 
        private void SendMessage(Image image)
        {
            var message = new System.Messaging.Message();
            message.Formatter = new BinaryMessageFormatter();
            message.Body = image;
            queue.Send(message);
            MessageBox.Show("圖像發(fā)送成功");
        }
 
        private void button2_Click(object sender, EventArgs e)
        {
            OpenFileDialog open = new OpenFileDialog();
            open.Filter = "圖像文件|*.jpg;*.bmp;*.png";
            open.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.MyPictures);
            if(open.ShowDialog() == DialogResult.OK)
            {
                Image image = Bitmap.FromFile(open.FileName);
                SendMessage(image);
            }
        }
 
        private void button3_Click(object sender, EventArgs e)
        {
            MessageBox.Show(queue.GetAllMessages().Length.ToString());
        }
 
        private void button4_Click(object sender, EventArgs e)
        {
            queue.Purge();
        }
    }

接收端

    public partial class Form1 : Form
    {
        MessageQueue queue;
        string path = ".\\Private$\\testQueue";
        public Form1()
        {
            InitializeComponent();
            CreateMessageQueue();
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
            RecvStringMessage();
        }
 
 
        private void button2_Click(object sender, EventArgs e)
        {
            RecvImageMessage();
        }
 
        private void CreateMessageQueue()
        {
            if (MessageQueue.Exists(path))
            {
                queue = new MessageQueue(path);
            }
            else
            {
                queue = MessageQueue.Create(path);
            }
        }
 
        public void RecvStringMessage()
        {
            if (queue.GetAllMessages().Length == 0)
            {
                MessageBox.Show("消息隊(duì)列為空");
                return;
            }
            var message = queue.Receive();
            message.Formatter = new XmlMessageFormatter(new Type[] {typeof(string) });
            MessageBox.Show(message.Body.ToString());
        }
 
        public void RecvImageMessage()
        {
            if (queue.GetAllMessages().Length == 0)
            {
                MessageBox.Show("消息隊(duì)列為空");
                return;
            }
            var message = queue.Receive();
            message.Formatter = new BinaryMessageFormatter();
            Image image = (Image)message.Body;
            Form form = new Form();
            form.Width = 1024;
            form.Height = 768;
            PictureBox pbox = new PictureBox();
            pbox.Width = 1024;
            pbox.Height = 768;
            pbox.SizeMode = PictureBoxSizeMode.Zoom;
            pbox.Image = image;
            form.Controls.Add(pbox);
            form.ShowDialog();
        }
    }

調(diào)用示例

 可以在計(jì)算機(jī)管理中查看到消息隊(duì)列的詳細(xì)信息,還未被接收的消息會(huì)在隊(duì)列消息中看到,被接收并消費(fèi)后即自動(dòng)刪除。

源碼參考:C#消息隊(duì)列MSMQ

以上就是C#使用Microsoft消息隊(duì)列(MSMQ)的示例詳解的詳細(xì)內(nèi)容,更多關(guān)于C# Microsoft消息隊(duì)列的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

最新評(píng)論

仁寿县| 前郭尔| 克拉玛依市| 临漳县| 安化县| 广南县| 讷河市| 宜城市| 钦州市| 英山县| 信宜市| 麻城市| 法库县| 微博| 广西| 即墨市| 富阳市| 灵丘县| 金塔县| 成都市| 沂源县| 象州县| 巨鹿县| 修文县| 屏山县| 板桥市| 浦县| 新巴尔虎左旗| 汶上县| 阳江市| 涿州市| 南皮县| 抚宁县| 上林县| 右玉县| 南皮县| 保定市| 深泽县| 鄱阳县| 施秉县| 青海省|