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));
}
}
}
}
C# 消息队列 多线程 委托的更多相关文章
- Python进阶【第二篇】多线程、消息队列queue
1.Python多线程.多进程 目的提高并发 1.一个应用程序,可以有多进程和多线程 2.默认:单进程,单线程 3.单进程,多线程 IO操作,不占用CPU python的多线程:IO操作,多线程提供并 ...
- Android开发 ---多线程操作:Handler对象,消息队列,异步任务下载
效果图: 1.activity_main.xml 描述:定义了六个按钮 <?xml version="1.0" encoding="utf-8"?> ...
- day10 消息队列,多进程和多线程以及协程,异步IO,事件驱动等
回顾一下线程和进程 线程与进程的区别 守护线程: 队列: 两种方式: 先进先出 # 后入先出 #卖水果,后来的来的是新的 生产者消费者模型: 生产包子, 吃包子 事件 event: 红绿灯模型 ...
- 深入浅出Win32多线程设计之MFC的多线程-线程与消息队列(经典)
1.创建和终止线程 在MFC程序中创建一个线程,宜调用AfxBeginThread函数.该函数因参数不同而具有两种重载版本,分别对应工作者线程和用户接口(UI)线程. 工作者线程 CWinThread ...
- 微软 消息队列 MessageQueue 简单使用
1.在服务电脑上打开 消息队列 ①进入控制面板>程序>启用或关闭windows功能 ②将需要的勾选(我自己全选了哈哈哈) ③我的电脑 右键 打开管理 见到消息队列 在专用队列上新建专用队列 ...
- C#实战Microsoft Messaging Queue(MSMQ)消息队列(干货)
前言 在使用MSMQ之前,我们需要自行安装消息队列组件!(具体安装方法大家自己搜一下吧) 采用MSMQ带来的好处是:由于是异步通信,无论是发送方还是接收方都不用等待对方返回成功消息,就可以执行余下的代 ...
- PetShop 4.0学习笔记:消息队列MSMQ
直到今天才知道,在我们每天都在用的Window系统里还有这么好用的一个编程组件:消息队列.它能够解决在大数据量交换的情况下的性能问题,特别是BS系统的数据库性能.而且它的异步处理方式能给程序员最大的便 ...
- C#实战Microsoft Messaging Queue(MSMQ)消息队列
前言 在使用MSMQ之前,我们需要自行安装消息队列组件!(具体安装方法大家自己搜一下吧) 采用MSMQ带来的好处是:由于是异步通信,无论是发送方还是接收方都不用等待对方返回成功消息,就可以执行余下的代 ...
- C#实战Microsoft Messaging Queue(MSMQ)消息队列(干货)<转>
前言 在使用MSMQ之前,我们需要自行安装消息队列组件!(具体安装方法大家自己搜一下吧) 采用MSMQ带来的好处是:由于是异步通信,无论是发送方还是接收方都不用等待对方返回成功消息,就可以执行余下的代 ...
随机推荐
- vector注意事项
vector注意事项: 如果你添加元素,但是vector的容量(是容量,不是大小,容量比大小大,会预先多分配空间)不够的话,系统就会重新分配一段内存,然后把原先的内容全部拷贝过去,然后删除原先的内容. ...
- redux 基础
antd 的使用 1.安装npm install antd --save 2.引入到项目中 import 'antd/dist/antd.css'; // or 'antd/dist/antd.les ...
- 张嘴高并发,闭口微服务,Docker不了解一下?
Docker镜像与容器 理解虚拟化 计算机中,虚拟化是一种资源管理技术,打破计算机的内存.网络.硬盘等资源的不可切割的障碍,更好的进行的资源分配: 在实际生产环境中,虚拟化技术主要解决的是高性能的物理 ...
- Android中的gen文件为空或者不存在的处理方法
Android中的gen文件时链接程序和XML中资源定义的桥梁,所以如果gen文件夹为空可能有以下的几个原因: 1.XML文件错误,这时可以检查res文件夹中的文件是否有错误 2.导入新的Androi ...
- bzoj1044题解
[题意分析] 本题等价于如下描述: 有一个长度为n的正整数序列,要求将其分解成m+1个子串,使最大子串和最小.求这个最大子串和及对应的分解方案数. [解题思路] 第一问二分+贪心即可.容易证明对于确定 ...
- 基础(二):Linux系统/etc/init.d目录和/etc/rc.local脚本
原文来自http://www.ghacks.net/2009/04/04/get-to-know-linux-the-etcinitd-directory/ 译文来自http://blog.csdn. ...
- I - Nice to Meet You
传送门 和10-17 B 君的第三题 类似,应该算是简化版,给出了固定的点. f[s]表示只考虑连端都在s集合中的边,s中的固定点(1或者2)能到达整个集合的方案数. 预处理c[s]表示s集合中的总边 ...
- [NOIP模拟16]题解
A.Blue 出题人大概已经去为国家处理积压子弹了? 贪心,让每一只青蛙(我怂行吧)都尽量往远跳,能到达的最远的被踩了就跳次远的,以此类推.可以维护一个单调队列,表示每只青蛙的位置(开始都是0).然后 ...
- (转)4年python,总结一些改善Python程序的建议
自己写Python也有四五年了,一直是用自己的"强迫症"在维持自己代码的质量.都有去看Google的Python代码规范,对这几年的工作经验,做个简单的笔记,如果你也在学pythp ...
- php 常用加密函数
md5()md5()默认情况下以 32 字符十六进制数字形式返回散列值,它接受两个参数,第一个为要加密的字符串,第二个为raw_output的布尔值,默认为false,如果设置为true,md5()则 ...