时间:2019-05-10 标签:c#socketThread

Posted

技术标签:

【中文标题】时间:2019-05-10 标签:c#socketThread【英文标题】:c# socket Thread 【发布时间】:2020-06-15 14:43:27 【问题描述】:

尝试通过 c# winform 线程化套接字。我不知道这段代码是否正常工作。如果没有,我想用线程处理套接字。寻求帮助。

有消息提示客户端和服务器已连接,但没有相互接收数据。我不知道是什么问题。

private void Login_box_Click(object sender, EventArgs e)
        
            string email = textBox1.Text;
            string pw = textBox2.Text;

            Thread thread = new Thread(new ThreadStart(delegate ()
            
                this.Invoke(new Action(() => socketLogin(email, pw)));
                Thread.Sleep(1000);
            ));

            thread.Start();

 

private void socketLogin(string email, string pw)
            
                var loginjson = new JObject();

                loginjson.Add("email", email);
                loginjson.Add("password", pw);


                var socket = IO.Socket("http://localhost:3000/login.html");
                socket.On(Socket.EVENT_CONNECT, (data) =>
                
                    socket.Emit("socketlogin", loginjson.ToString());  
                );

                socket.On("login", (data) =>   
                    MessageBox.Show(data.ToString());

                );

            

服务器节点.js

io.on('connection', function(socket) 
    console.log('connection');
    socket.on('socketlogin', function(data)   

        var testLogin =  'Login': "success" ;

        socket.emit('login', data);
    );
  );

【问题讨论】:

1) 生成一个显式线程,该线程只是将线程编组(通过Invokexxx)返回到 UI 没有任何意义 2) 如果您必须调用使用 BeginInvoke,因为 Invoke 可能导致应用程序死锁 3) Sleeping 在线程末尾没有任何作用。考虑使用async/await 等价物 谢谢。但我不知道如何改变它。我可以请求更多帮助吗? @jaebeom33 - 等待任务,年轻的学徒。 【参考方案1】:

我会做如下的事情:

private void Login_box_Click(object sender, EventArgs e)

    string email = textBox1.Text;
    string pw = textBox2.Text;

    ThreadPool.QueueUserWorkItem(socketLogin, new Tuple<string, string>(email, pw));


private void socketLogin(object obj)

    string email = ((Tuple<string, string>)obj).Item1;
    string pw = ((Tuple<string, string>)obj).Item2;

    var loginjson = new JObject();

    loginjson.Add("email", email);
    loginjson.Add("password", pw);


    var socket = IO.Socket("http://localhost:3000/login.html");
    socket.On(Socket.EVENT_CONNECT, (data) =>
    
        socket.Emit("socketlogin", loginjson.ToString());  
    );

    socket.On("login", (data) =>   
        MessageBox.Show(data.ToString());

    );


希望这会有所帮助!

【讨论】:

以上是关于时间:2019-05-10 标签:c#socketThread的主要内容,如果未能解决你的问题,请参考以下文章

时间:2019-05-10 标签:c#release optimizationunusedstring

时间:2019-05-10 标签:c#paypalrestapitransactionsearch

时间:2019-05-10 标签:c#socketThread

时间:2019-05-10 标签:c++threadeddbclassmemorymixup

时间:2019-05-10 标签:c#applicationautostartwindows7

时间:2019-05-10 标签:c++freadjibberish