我正在嘗試在 WinForms 應用程式中的串列框中顯示訊息,但它不起作用。我使用的是最新的 Azure 命名空間,因此使用了異步方法。下面是Program.cs:
namespace App
{
public class Program
{
static ServiceBusClient client;
static ServiceBusProcessor processor;
public static List<string> data = new List<string>();
[STAThread]
public static async Task MessageHandler(ProcessMessageEventArgs args)
{
string body = args.Message.Body.ToString();
data.Add(body);
// complete the message. messages is deleted from the subscription.
await args.CompleteMessageAsync(args.Message);
}
public static void Main(string[] args)
{
Application.Run(new Form1());
}
public static async Task MainAsync()
{
client = new ServiceBusClient(_serviceBusConn);
// create a processor that we can use to process the messages
processor = client.CreateProcessor(_serviceBustopic, _ServiceBusSubscription, new ServiceBusProcessorOptions());
try
{
// add handler to process messages
processor.ProcessMessageAsync = MessageHandler;
// add handler to process any errors
processor.ProcessErrorAsync = ErrorHandler;
// start processing
await processor.StartProcessingAsync();
}
finally
{
await processor.DisposeAsync();
await client.DisposeAsync();
}
}
}
}
//end of Program.cs
和Form.cs:
namespace App
{
public partial class Form1 : Form
{
public static List<string> AppNames = new List<string>();
public Form1()
{
InitializeComponent();
}
public static async Task receiveMessage()
{
await Program.MainAsync();
AppNames = Program.data;
}
public async void button1_Click(object sender, EventArgs e)
{
await receiveMessage();
for (int i = 0; i < AppNames.Count; i )
{
listBox1.Items.Add("item" AppNames[i].ToString());
}
}
}
}
這個程式有一個控制臺版本可以運行,但我似乎無法讓它在這個 Winforms 應用程式中顯示訊息。一些除錯顯示該程式正在進入主異步。單擊按鈕時的方法,但盡管訊息是通過服務總線發送的,但它并沒有進入訊息處理程式。
uj5u.com熱心網友回復:
您用于服務總線客戶端和處理器的模式在您的方案中不起作用。
在MainAsync中,當您呼叫 時StartProcessingAsync,該方法將在處理器啟動后回傳。然后執行將到達finally處理處理器和客戶端的塊。此時,處理器沒有運行,因此沒有接收訊息。
每次button1_Click運行時,您都會創建一組新客戶端,建立與 Azure 的新連接,然后立即將它們丟棄。
處理器旨在成為一種在后臺連續運行的長壽命型別,當訊息可用時回呼到您的代碼中。同樣,客戶端旨在在應用程式的整個生命周期中用作單例。我建議通讀Service Bus "Hello World" 示例,這將有助于解釋一些型別和推薦的使用模式。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/488386.html
