Socket.Accept()无法在Window窗体中工作c#

时间:2017-10-01 03:28:24

标签: c# sockets

我想创建一个应用程序客户端 - LAN(局域网)中的服务器聊天。 我在Console c#中演示完整且没有错误。但是当我使用Window Form(c#)时,在服务器端,它就停留在行中:

Socket client = newsock.Accept();

并且未运行显示窗口窗体。

我该如何解决?谢谢大家!

1 个答案:

答案 0 :(得分:0)

这是因为,newsock.Accept()方法实际上正在等待请求,并且在收到请求之前,代码的下一行(显然是UI组件的初始化方法)不会到达。您需要做的是将其移动到一个线程中,然后将其分配给load事件。例如:

public MyForm(){
    InitializeComponent();
    this.Loaded += OnWindowLoaded;
}  
private async void OnWindowLoaded(object sender, EventArgs e)
{
    await Task.Run(() => {
        while (runState) {
             Socket client = newsock.Accept();
             // Then do the rest
        }
    });
}