首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >来自EventHandler的Console.Writeline

来自EventHandler的Console.Writeline
EN

Stack Overflow用户
提问于 2013-03-06 03:04:05
回答 1查看 1.5K关注 0票数 8

我已经写了一个简单的异步TCP-Server -它工作得很好。但现在我想在Console-Testprogram上输出接收到的数据。问题是,这不起作用!如果我将MainThread连接到EventHandler,程序不会执行任何操作。Debug显示调用了sc05Server_DataAvailable,但随后什么也没有发生。该程序仍在响应。

代码如下:

代码语言:javascript
复制
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;
    }
}

主程序:

代码语言:javascript
复制
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
    }
}

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-03-06 17:00:24

您可能正在经历某种类型的种族问题,尽管控制台应该对此免疫。检查这个问题,但请注意,我无法重现这个问题:Strange behaviour of Console.ReadKey() with multithreading

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15231997

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档