一个简单的C#消息队列示例
来源:互联网 发布:学阀 知乎 编辑:程序博客网 时间:2024/05/16 14:45
练习消息队列的一个小例子 没什么技术含量 代码也没规范
有关于MSMQ方法介绍:
使用create方法创建你指定路径的消息队列,使用delete方法删除一个已经存在的消息队列.
使用exists方法判别是否存在一个消息队列.
使用GetPublicQueues方法获取消息队列网络中的一个消息队列
使用Peek或者是BeginPeek方法查看消息队列中的消息,而不会删除它们
使用Receive或者上BeginReceive方法从消息队列中取出一个消息,同时在消息队列中删除它.
使用Send方法,送一个消息到指定的消息队列中.
引用using System.Messaging;
一个小类
public class aa
{
private string _id;
private string _name;
public string id
{
get { return _id; }
set { _id = value; }
}
public string name
{
get { return _name; }
set { _name = value; }
}
}
发送代码(form1)
private void button1_Click(object sender, EventArgs e)
{
MessageQueue mq = null;
string mqName = ".//Private$//myqueue";
if (MessageQueue.Exists(mqName))
mq = new MessageQueue(mqName);
else
mq = MessageQueue.Create(mqName, false);
aa a = new aa();
a.id = textBox1.Text;
a.name = textBox2.Text;
mq.Formatter = new XmlMessageFormatter(new Type[]{typeof(aa)});
mq.Send(a, "xiao");
//删除队列
//MessageQueue.Delete(".//Private$//myqueue");
}
接受队列(测试要显示在listbox里所以建立了一个代理 form2)
delegate void Lists(string s);
public System.Messaging.Message m = new System.Messaging.Message();
接收
private void button1_Click(object sender, EventArgs e)
{
MessageQueue mq = new MessageQueue(".//Private$//myqueue");
mq.Formatter = new XmlMessageFormatter(new Type[] { typeof(aa) });
mq.ReceiveCompleted += new ReceiveCompletedEventHandler(bb);
mq.BeginReceive();
}
private void bb(object source, ReceiveCompletedEventArgs asyncResult)
{
try
{
MessageQueue mq = (MessageQueue)source;
m = mq.EndReceive(asyncResult.AsyncResult);
Lists l = new Lists(addlist);
if (m.Body.ToString() != null)
{
aa a = (aa)m.Body;
Invoke(l, a.id + "----" + a.name);
}
mq.BeginReceive();
}
catch (MessageQueueException e)
{
MessageBox.Show(e.Message);
}
return;
}
private void addlist(string str)
{
listBox1.Items.Add(str);
}
上面在WinForm程序运行正常,在系统服务中报错无法检索消息列表,
原因是没设置访问权限的问题,把上面
if (MessageQueue.Exists(mqName))
mq = new MessageQueue(mqName);
else
mq = MessageQueue.Create(mqName, false);
改成
if (MessageQueue.Exists(mqName))
mq = new MessageQueue(mqName);
else
{
mq = MessageQueue.Create(mqName, false);
/可以根据实际情况自己设置
mq.SetPermissions("Everyone", MessageQueueAccessRights.FullControl);
}
- 一个简单的C#消息队列示例
- 一个简单的C#消息队列示例
- c# .net windows消息队列简单应用示例
- MFC 一个简单的消息示例
- c#操作axwebbrowser的一个简单示例
- 一个基于C#的简单串口示例
- C#中使用Windows消息队列服务(MSMQ)简单示例
- 一个关于C#操作消息队列的代码
- 一个简单的消息队列类(封装system V消息队列)
- rocketmq消息的简单示例
- 消息队列的简单处理
- 简单的消息队列实例
- 消息队列的简单实现
- redis简单的消息队列
- Linux下的消息队列示例
- 分布式消息队列RocketMQ&Kafka -- 消息的“顺序消费”-- 一个看似简单的复杂问题
- 分布式消息队列RocketMQ&Kafka -- 消息的“顺序消费”-- 一个看似简单的复杂问题
- 分布式消息队列RocketMQ&Kafka -- 消息的“顺序消费”-- 一个看似简单的复杂问题
- MTK平台是什么
- Haskell趣学指南7-8
- “递归函数”入门
- widget播放器
- Berkeley DB使用简介
- 一个简单的C#消息队列示例
- Rac 的GES/GCS原理6(图文解释cache fusion机制2)
- POJ 1244
- 关于Prolog的事
- hello
- SQLNET.AUTHENTICATION_SERVICES
- Java做的一个J2ME手机地图API,与j2Se地图API,以及地图服务器。
- ViewState Sysptoms
- 开博第一篇