亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

寫在前面

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

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

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

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

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

公用隊(duì)列 MachineName\QueueName

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

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

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

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

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

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

需要引用 System.Messaging 類庫

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ī)管理中查看到消息隊(duì)列的詳細(xì)信息,還未被接收的消息會在隊(duì)列消息中看到,被接收并消費(fèi)后即自動刪除。

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

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

相關(guān)文章

  • C#中const,readonly和static關(guān)鍵字的用法介紹

    C#中const,readonly和static關(guān)鍵字的用法介紹

    這篇文章介紹了C#中const,readonly和static關(guān)鍵字的用法,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-08-08
  • 關(guān)于C#中的字體別名問題

    關(guān)于C#中的字體別名問題

    在C#中使用Graphics對象的DrawString方法繪制文本時,可以通過設(shè)置TextRenderingHint屬性來控制字體混疊效果,對于14號或更大的字體,建議使用AntiAliasGridFit;對于8到14點(diǎn)之間的字體,建議使用AntiAlias;對于小于8點(diǎn)的字體,建議使用ClearTypeGridFit
    2025-01-01
  • C#簡單的加密類實(shí)例

    C#簡單的加密類實(shí)例

    AesManaged - 高級加密標(biāo)準(zhǔn)(AES) 對稱算法的管理類
    2013-03-03
  • 輕松學(xué)習(xí)C#的裝箱與拆箱

    輕松學(xué)習(xí)C#的裝箱與拆箱

    輕松學(xué)習(xí)C#的裝箱與拆箱,在之前的文章簡單的提到了輕松學(xué)習(xí)C#的裝箱與拆箱,本文帶著大家更加詳細(xì)的介紹輕松學(xué)習(xí)C#的裝箱與拆箱,感興趣的小伙伴們可以參考一下
    2015-11-11
  • WinForm實(shí)現(xiàn)讀取Resource中文件的方法

    WinForm實(shí)現(xiàn)讀取Resource中文件的方法

    這篇文章主要介紹了WinForm實(shí)現(xiàn)讀取Resource中文件的方法,很實(shí)用的一個功能,需要的朋友可以參考下
    2014-08-08
  • 深入理解C#窗體關(guān)閉事件

    深入理解C#窗體關(guān)閉事件

    很多初學(xué)者都想把默認(rèn)的C#關(guān)閉按鈕事件弄明白,本文就介紹一下C#窗體關(guān)閉事件,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-10-10
  • C#實(shí)現(xiàn)實(shí)時監(jiān)控文件夾變化

    C#實(shí)現(xiàn)實(shí)時監(jiān)控文件夾變化

    在開發(fā)各種應(yīng)用程序時,我們經(jīng)常需要對文件系統(tǒng)中的文件或文件夾進(jìn)行實(shí)時監(jiān)測,下面就跟隨小編一起來看看具體如何使用C#實(shí)現(xiàn)這一功能吧
    2024-03-03
  • C#序列化與反序列化集合對象并進(jìn)行版本控制

    C#序列化與反序列化集合對象并進(jìn)行版本控制

    這篇文章介紹了C#序列化與反序列化集合對象并實(shí)現(xiàn)版本控制的方法,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-09-09
  • RSA密鑰--JAVA和C#的區(qū)別及聯(lián)系

    RSA密鑰--JAVA和C#的區(qū)別及聯(lián)系

    這篇文章主要介紹了關(guān)于RSA密鑰事件JAVA和C#的區(qū)別及聯(lián)系,文章從RSA語法介紹開始展開詳細(xì)介紹了C#轉(zhuǎn)JAVA及JAVA轉(zhuǎn)C#,需要的小伙伴可以可以參考一下
    2021-10-10
  • C#實(shí)現(xiàn)五子棋游戲

    C#實(shí)現(xiàn)五子棋游戲

    這篇文章主要為大家詳細(xì)介紹了C#實(shí)現(xiàn)五子棋游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-01-01

最新評論