我设法正确地创建了一个发送者和要发送到RabbitMQ的消息,但是当使用上面给出的方法设置消费者时,它所做的只是消费消息,richtextbox控件没有更新,我也无法在Console中看到消息。我尝试在窗体加载事件和单击按钮事件调用该方法,结果相同,从服务器消耗消息,但在接口上没有返回
public async Task GetMessages()
{
try
{
var factory = new ConnectionFactory()
{
HostName = "localhost",
UserName = "guest",
Password = "guest"
};
using (var connection = factory.CreateConnection())
using (var channel = connection.CreateModel())
{
channel.QueueDeclare(queue: "administrator_queue", durable: false, exclusive: false, autoDelete: false, arguments: null);
var consumer = new AsyncEventingBasicConsumer(channel);
channel.BasicConsume(queue: "administrator_queue", autoAck: true, consumer: consumer);
consumer.Received += async (eventSender, eventArgs) =>
{
var message = Encoding.UTF8.GetString(eventArgs.Body.ToArray());
var currentDate = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
await Task.Run(() =>
{
Invoke((MethodInvoker)delegate
{
richTextBox.AppendText($"{currentDate}: {message}\n");
});
});
Console.WriteLine($"Received message: {currentDate}: {message}");
};
}
}
1条答案
按热度按时间6bc51xsx1#
在接收消息之前,这些类型正在被(
using
)释放。尝试将它们存储为成员变量。