gpt4 book ai didi

c# - 等到事件引发,然后继续代码

转载 作者:太空狗 更新时间:2023-10-30 01:02:46 25 4
gpt4 key购买 nike

我使用 C#(visual studio 2010) 使用 Windows 窗体开发了一个应用程序。此应用程序应连接到服务器并获取数据,然后处理该数据。

public partial class Form1 : Form
{
public string Result = "";

MyServer server = new MyServer();

public Form1()
{
InitializeComponent();

server.RecieveMessage += new MyServer.RecieveMessageEventHandler(server_RecieveMessage);
}

void server_RecieveMessage(object sender, string message)
{
Result = message;
}


public string SendCommand(string Command)
{


server.Send(Command);

//wait untill RecieveMessage event raised


//process Data is recieved

server.Send(AnotherCommand);

//wait untill RecieveMessage event raised


//process Data is recieved

....

//till i get what i want
return Result;
}

所以我想在 server.Send(Message) 之后等待,直到我得到事件的结果。有时我需要 4 到 5 秒才能得到结果。我必须做什么?

最佳答案

异步执行此操作的一种可能方法是使用 TaskCompletionSource<T> .它可能看起来像这样:

public async Task<string> SendMessageAsync(string message)
{
var tcs = new TaskCompletionSource<string>();

ReceiveMessangeEventHandler eventHandler = null;
eventHandler = (sender, returnedMessage) =>
{
RecieveMessage -= eventHandler;
tcs.SetResult(returnedMessage);
}

RecieveMessage += eventHandler;

Send(message);
return tcs.Task;
}

现在,当您想调用它并异步等待结果时,您可以这样做:

public async void SomeEventHandler(object sender, EventArgs e)
{
var response = await server.SendMessageAsync("HelloWorld");
// Do stuff with response here
}

SendMessageAsync将异步地将控制权交还给调用者,直到收到消息。然后,一旦它在下一行恢复,您就可以更改响应。

关于c# - 等到事件引发,然后继续代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32451151/

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