首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >为什么我的线程不能连续工作

为什么我的线程不能连续工作
EN

Stack Overflow用户
提问于 2014-03-07 06:01:26
回答 1查看 53关注 0票数 0
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Net;
using System.Net.Sockets;
using System.IO;
using System.Threading;


namespace MultiClientServer
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }



        private void button1_Click(object sender, EventArgs e)
        {
            TcpListener listner = new TcpListener(new IPEndPoint(IPAddress.Loopback, 8000));
            listner.Start();
            textBox1.Text += "Started TCP Server"+Environment.NewLine;
            listner.BeginAcceptTcpClient(new AsyncCallback(Accept), listner);
        }

        void Accept(IAsyncResult result)
        {
            textBox1.Invoke(new MethodInvoker(delegate()
                {
                    textBox1.Text += "Client Request Arrived" + Environment.NewLine;
                }));
            TcpListener listner1 = (TcpListener)result.AsyncState;
            TcpClient client = listner1.EndAcceptTcpClient(result);
            textBox1.Invoke(new MethodInvoker(delegate()
                {
                    textBox1.Text += "Client Request Approved" + Environment.NewLine;
                }));
            Thread th = new Thread(new ParameterizedThreadStart(ContinueRcv));
            th.Start(client);
        }

        void ContinueRcv(object obj)
        {
            TcpClient client = (TcpClient)obj;
            StreamReader sr = new StreamReader(client.GetStream());
            textBox1.Invoke(new MethodInvoker(delegate()
                {
                    textBox1.Text += sr.ReadLine() + Environment.NewLine;
                }));
        }
    }
}

我试着制作这个应用程序,这样当客户端连接超过一个新线程时,就会创建b,并且它会在继续接收b。不幸的是..。请用这段代码给我解决方案。意味着这不是一个阶级的要求什么的。我想知道如何用这个或任何相关的方式来做这件事。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-03-14 23:20:38

线程不是不断调用的东西,线程块中的代码需要不断调用,因为您的线程负责调用ContinueRcv --线程以该方法的结尾结束,

如果要连续地从Stream接收数据,则需要在无限循环中调用StreamReader的ReadLine(),

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
void ContinueRcv(object obj)
{
    TcpClient client = (TcpClient)obj;
    StreamReader sr = new StreamReader(client.GetStream());
    while (true) 
    {
        if ( !connection ) { // when connection closed, abort, terminated
            break;
        }
        msg = sr.ReadLine();
        textBox1.Invoke(new MethodInvoker(delegate()
        {
            textBox1.Text += msg  + Environment.NewLine;
        }));
    }
}

当连接关闭时,请记住断开循环,

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

https://stackoverflow.com/questions/22252159

复制
相关文章

相似问题

添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文