gpt4 book ai didi

c# - 来自 EventHandler 的 Console.Writeline

转载 作者:可可西里 更新时间:2023-11-01 12:51:34 25 4
gpt4 key购买 nike

我编写了一个简单的异步 TCP 服务器 - 它运行良好。但是现在我想在控制台测试程序上输出接收到的数据。问题是,这是行不通的!如果我将 MainThread 连接到 EventHandler,程序什么都不做。调试显示调用了 sc05Server_DataAvailable 但随后什么也没发生。该程序仍然响应。

这里是代码:

private void ReadCallback(IAsyncResult asyncResult)
{
Sc05BdClient sc05BdClient = asyncResult.AsyncState as Sc05BdClient;
if (sc05BdClient == null) return;
NetworkStream networkStream = sc05BdClient.NetworkStream;
int read = networkStream.EndRead(asyncResult);

if (read == 0)
{
lock (clients)
{
clients.Remove(sc05BdClient);
return;
}
}

string data = Encoding.GetString(sc05BdClient.Buffer, 0, read);
System.Diagnostics.Debug.Print(data);
OnDataAvailable(this, new DataAvailableEventArgs(data)); <---- here Handler is called
networkStream.BeginRead(sc05BdClient.Buffer, 0, sc05BdClient.Buffer.Length, ReadCallback, sc05BdClient);
}


public event EventHandler<DataAvailableEventArgs> DataAvailable;

protected virtual void OnDataAvailable(object sender, DataAvailableEventArgs e)
{
EventHandler<DataAvailableEventArgs> handler = DataAvailable;
if (handler != null)
handler(sender, e);
}


public class DataAvailableEventArgs : EventArgs
{
public string Data;

public DataAvailableEventArgs(string data)
{
Data = data;
}
}

主程序:

class Program
{
static void Main()
{
Sc05BdServer sc05BdServer = new Sc05BdServer(IPAddress.Any, 2006);
sc05BdServer.DataAvailable += sc05BdServer_DataAvailable;
sc05BdServer.Start();

Console.ReadKey();
sc05BdServer.Stop();
}

static void sc05BdServer_DataAvailable(object sender, DataAvailableEventArgs e)
{
Console.WriteLine(e.Data); <--- this is called once
}
}

我认为它与线程有关 - 但我不知道如何使用它们。

最佳答案

您可能遇到了某种种族问题,尽管控制台应该不会受到影响。检查这个问题,但请注意我无法重现该问题:Strange behaviour of Console.ReadKey() with multithreading

关于c# - 来自 EventHandler 的 Console.Writeline,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15231997/

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