一个看次简单,但有点难的问题,
本段代码是一个多线程端口通讯的程序.
问题不是端口通讯 也不是多线城的问题,这些我都做出来了.
问题是按了监听 按钮 也就是(Button1)
我本意是要这Button1隐藏,可老是隐藏不了.
望大侠们告之!  多谢请大家测试了再发贴,别乱说哦。代码如下:using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading;
using System.IO;public partial class Admin_Info_AddInfo : PageBase
{
    public static TcpListener myList;
    public static Socket s;
    protected void Page_Load(object sender, EventArgs e)
    {
    
    }    //启动程序
    public void Fist()
    {        int prot = Convert.ToInt32(this.TextBox1.Text.Trim());
        try
        {
            IPAddress ipAd = IPAddress.Parse(Dns.GetHostEntry(Dns.GetHostName()).AddressList[0].ToString());
            myList = new TcpListener(ipAd, prot);
            myList.Start();
            while (true)
            {
                s = myList.AcceptSocket();
                AcceptSocketClass accept = new AcceptSocketClass(s);
                accept.StartThread();
            }
        }
        catch (Exception e)
        {
            this.Label1.Text = e.Message;
        }
    }
    //监听程序
    public class AcceptSocketClass
    {
        public static int times = 0;
        Socket socket;
        public AcceptSocketClass(Socket s)
        {
            socket = s;
        }
        public void StartThread()
        {
            byte[] b = new byte[1024];
            int k = socket.Receive(b);
            if (k > 0)
            {
                string str = Convert.ToString(Encoding.BigEndianUnicode.GetString(b, 0, k));
                //写入数据库
                int nmuber = str.LastIndexOf("#");
                if (nmuber > 0)
                {
                   //数据库操作
                 }
                else
                {
                   //数据库操作
                }
                Thread td = new Thread(new ParameterizedThreadStart(DoAction));
                td.Start(times);
                times++;
            }
        }
        private void DoAction(object t)
        {
            Thread.Sleep(10000);
            ASCIIEncoding asen = new ASCIIEncoding();
            socket.Send(asen.GetBytes("The" + ((int)t + 1).ToString() + "th string was Echoed by the server."));
            Thread.CurrentThread.Abort();
        }
    }    protected void Button1_Click(object sender, EventArgs e)
    {
        this.Button1.Visible = false;
        Fist();
    }
}

解决方案 »

  1.   

            private void button1_Click( object sender, EventArgs e ) {
                button1.Visible = false;
            }
    刚刚测试的,没有问题呀,完全可以隐藏
    你先把Fist(); 这一行注释掉,不知道它里面做了些什么,为不影响测试结果,楼主再试下
      

  2.   

    没办法.项目是Web的.
    命苦啊!
      

  3.   

    2楼的兄弟,你看清楚我代码再说了哦.
    你以为我不知道button1.Visible = false;?
      

  4.   

    你那个while(true)不会死循环吗?
      

  5.   

    还有一种东西叫干嘛干嘛...Web页面上出现这种代码...懒得说了...
      

  6.   

    加个static的全局bool表示button已经点了。在button click事件处理里改变这变量。在Page_Load里检查这变量然后设置button的Visible
      

  7.   

     你的监听无限的运行这,这个页面就永远执行不完,所以button不能消失,因为一次请求没有回来呢,
    想让它没,你可以新开一个线程去监听;

     Thread thThreadRead = new Thread(new ThreadStart(Fist));
            thThreadRead.Start();//启动线程 
      

  8.   

    我猜是Fist(); 中有问题导致页面的生命周期未执行完毕
    注释它再试一下