gpt4 book ai didi

c# - 如何避免在 C# 中完成线程?

转载 作者:太空宇宙 更新时间:2023-11-03 12:02:59 24 4
gpt4 key购买 nike

我有一个用 C# 编写的 RabbitMQ 客户端程序。虽然该应用程序在基于控制台的应用程序中工作(因为执行被 Console.ReadLine 阻止),但它在基于 Windows 窗体的应用程序中不起作用。在 Windows 窗体应用程序中,执行不会等待 Console.ReadLine 并在完成时终止。我正在寻找解决方案,让我的监听器在不终止的情况下不断监视来自服务器的新消息。这是客户端代码:

    try {
var factory = new ConnectionFactory() { HostName = "xxx" , UserName ="xxx", Password="xxx"};
using(var connection = factory.CreateConnection())
using(var channel = connection.CreateModel())
{
channel.ExchangeDeclare(exchange: "call_notify", type: "fanout");

var queueName = channel.QueueDeclare().QueueName;
channel.QueueBind(queue: queueName,
exchange: "call_notify",
routingKey: "");

var consumer = new EventingBasicConsumer(channel);
consumer.Received += (model, ea) =>
{
var body = ea.Body;
var message = Encoding.UTF8.GetString(body);
Console.WriteLine(message);
};
channel.BasicConsume(queue: queueName,
autoAck: true,
consumer: consumer);

Console.WriteLine(" Press [enter] to exit.");
Console.ReadLine(); // Program does'nt wait here in windows form based application
}
}

最佳答案

  1. 不要使用 using 因为那样会立即处理掉所有东西
  2. 将需要的对象(连接? channel ?消费者?)存储在类字段而不是局部变量中
  3. 不需要线程,因为对象是异步处理的。只需创建对象即可
  4. 当应用程序终止或您需要停止监听时关闭/处置对象

这样他们就会一直活到应用程序终止。

关于c# - 如何避免在 C# 中完成线程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56311145/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com