C# 消息队列 多线程 委托

发消息

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Messaging;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        string QueuePath = ".\\private$\\test";
        IMessageFormatter formatter = new System.Messaging.BinaryMessageFormatter();

        private void button1_Click(object sender, EventArgs e)
        {
            MessageQueue queue;
            if (!MessageQueue.Exists(QueuePath))
            {
                queue = MessageQueue.Create(QueuePath);
                queue.SetPermissions("Administrators", MessageQueueAccessRights.FullControl);
                queue.Label = QueuePath;
            }

            System.Messaging.Message message = new System.Messaging.Message();
            message.Body = richTextBox1.Text;
            message.Formatter = formatter;

            if (!MessageQueue.Exists(QueuePath))
            {
                return;
            }

            queue = new System.Messaging.MessageQueue(QueuePath);
            queue.Send(message);
        }

    }
}

收消息

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Messaging;

namespace WindowsFormsApplication2
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        string QueuePath = ".\\private$\\test";
        IMessageFormatter formatter = new System.Messaging.BinaryMessageFormatter();
        private void Form1_Load(object sender, EventArgs e)
        {

        }
        private object obj = new object();
        private void MessageQueueReceive()
        {
            if (!MessageQueue.Exists(QueuePath))
            {
                return;
            }
            MessageQueue queue = new MessageQueue(QueuePath);
            System.Messaging.Message message = queue.Receive();
            message.Formatter = formatter;
            lock (obj)//加锁
            {
                WriteLog(message.Body.ToString());//给你的控件赋值
            }
            MessageQueueReceive();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            Thread myThread = new Thread(new ThreadStart(MessageQueueReceive));
            myThread.Start();
        }
        //定义一个委托
        private delegate void WriteLogHandle(string format);
        //输出
        private void WriteLog(string msg)
        {
            if (richTextBox1.InvokeRequired)
            {
                richTextBox1.BeginInvoke(new WriteLogHandle(WriteLog), msg);
            }
            else
            {
                richTextBox1.AppendText(string.Format(msg));
            }
        }
    }
}
时间: 2024-08-25 01:10:35

C# 消息队列 多线程 委托的相关文章

PHP 高级编程之多线程-消息队列

Home  |  Mirror  |  Search  |  杂文  |  ITEYE 博客  |  OSChina 博客  |  51CTO 博客  |  Linkedin PHP 高级编程之多线程 http://netkiller.github.io/journal/thread.php.html Mr. Neo Chen (netkiller), 陈景峰(BG7NYT) 中国广东省深圳市龙华新区民治街道溪山美地 518131 +86 13113668890 +86 755 29812080

PetShop 4.0学习笔记:消息队列MSMQ

直到今天才知道,在我们每天都在用的Window系统里还有这么好用的一个编程组件:消息队列.它能够解决在大数据量交换的情况下的性能问题,特别是BS系统的数据库性能.而且它的异步处理方式能给程序员最大的便利与最好的用户体验. 1.首先在需要进行消息队列的服务器上安装MSMQ,我的系统是win2003+iis6,所以这个安装选项在添加删除程序->windows组件->应用程序服务器内.默认是不安装的,需要手动选择. 2.建立消息队列的存放路径.这可以在windows的计算机管理内添加,也可以在程序中

微软 消息队列 MessageQueue 简单使用

1.在服务电脑上打开 消息队列 ①进入控制面板>程序>启用或关闭windows功能 ②将需要的勾选(我自己全选了哈哈哈) ③我的电脑 右键 打开管理 见到消息队列 在专用队列上新建专用队列 ⑤填写名称还有选择是否是事务性 好到这里就基本准备完成 下面就要使用队列 来发送消息 //创建消息队列 并发送消息到队列 try { //连接到本地新创建的队列 MessageQueue myQueue = new MessageQueue(".\\private$\\test2");

android 中使用View的消息队列api更新数据

基本上只要继承自View的控件,都具有消息队列或者handler的一些处理方法,下面是一些handler方法以及被View封装了的方法,其底层用的基本都是handler的api. 我么开一下postDelay的定义 android.view.View  public boolean postDelayed(Runnable action, long delayMillis) {         final AttachInfo attachInfo = mAttachInfo;         

消息队列实现订单异步提交

what MSMQ(Microsoft Message Queue),微软消息队列,用于应用程序之间相互通信的一种异步传输模式.应用程序可以分布在同台机器上,也可以分布于互联的网络中的任意位置.基本原理:消息发送者把要发送的消息放入容器,也就是Message(消息),然后保存到系统公用空间的消息队列中(Message Queue)中,本地或互联位置上的消息接收程序再从队列中取出发给它的消息进行处理.消息类型可以是文本,图像,自定义对象等.消息队列分为公共队列和私有队列. why 一.用于进程间的

使用事件和消息队列实现分布式事务(转+补充)

虽然本文并非笔者原创,但是我们在非强依赖的事务中原理上也是采用这种方式处理的,不过因为没有仔细去总结,最近在整理和总结时看到了,故转载并做部分根据我们实际情况的完善和补充. 不同于单一架构应用(Monolith), 分布式环境下, 进行事务操作将变得困难, 因为分布式环境通常会有多个数据源, 只用本地数据库事务难以保证多个数据源数据的一致性. 这种情况下, 可以使用两阶段或者三阶段提交协议来完成分布式事务.但是使用这种方式一般来说性能较差, 因为事务管理器需要在多个数据源之间进行多次等待. 有一

C#分布式消息队列 EQueue 2.0 发布啦

前言 最近花了我几个月的业余时间,对EQueue做了一个重大的改造,消息持久化采用本地写文件的方式.到现在为止,总算完成了,所以第一时间写文章分享给大家这段时间我所积累的一些成果. EQueue开源地址:https://github.com/tangxuehua/equeue EQueue相关文档:http://www.cnblogs.com/netfocus/category/598000.html EQueue Nuget地址:http://www.nuget.org/packages/eq

消息队列库——ZeroMQ

消息队列库--ZeroMQ ZeroMQ(简称ZMQ)是一个基于消息队列的多线程网络库,其对套接字类型.连接处理.帧.甚至路由的底层细节进行抽象,提供跨越多种传输协议的套接字. ZMQ是网络通信中新的一层,介于应用层和传输层之间(按照TCP/IP划分),其是一个可伸缩层,可并行运行,分散在分布式系统间. ZMQ不是单独的服务,而是一个嵌入式库,它封装了网络通信.消息队列.线程调度等功能,向上层提供简洁的API,应用程序通过加载库文件,调用API函数来实现高性能网络通信. 主线程与I/O线程: I

消息队列(二)

本文是大型网站架构系列:消息队列(二),主要分享JMS消息服务,常用消息中间件(Active MQ,Rabbit MQ,Zero MQ,Kafka). 四.JMS消息服务 讲消息队列就不得不提JMS .JMS(JAVA Message Service,java消息服务)API是一个消息服务的标准/规范,允许应用程序组件基于JavaEE平台创建.发送.接收和读取消息.它使分布式通信耦合度更低,消息服务更加可靠以及异步性. 在EJB架构中,有消息bean可以无缝的与JM消息服务集成.在J2EE架构模