弹出窗口的代码
        public event EventHandler toolStaEvent;        private string strConnectStatus;
        public string TextBoxValue
        {
            get { return strConnectStatus; }
            set { strConnectStatus = value; }
        }        private Color clrConnectStatus;
        public Color CLRConnectStatus
        {
            get { return clrConnectStatus; }
            set { clrConnectStatus = value; }
        }
       //sckError                     9   错误 
        private void axWinsock1_Error(object sender, AxMSWinsockLib.DMSWinsockControlEvents_ErrorEvent e)
        {
            if (timer_SocketConnect.Enabled != true)
            {
                if ((axWinsock1.CtlState != 7) && (axWinsock1.CtlState != 6))
                {
                    timer_SocketConnect.Enabled = true;
                }
            }        }        public frmSendState frmss;
       //timer是1秒执行一次的
        private void timer_SocketConnect_Tick(object sender, EventArgs e)
        {            TextBoxValue = "TCP连接已经建立";
            CLRConnectStatus = Color.Green;            if (toolStaEvent != null)
                toolStaEvent(sender, e);            if ((axWinsock1.CtlState != 7) && (axWinsock1.CtlState != 6))
            {
               if (frmss == null)
               {
                    frmss = new frmSendState("正在连接中...");
                    frmss.MdiParent = this.MdiParent;
                    frmss.Show();
                    System.Threading.Thread.Sleep(500);                    TextBoxValue = "TCP连接已经建立";
                    CLRConnectStatus = Color.Green;                    if (toolStaEvent != null)
                       toolStaEvent(sender, e);                }
                else if (axWinsock1.CtlState == 7)
                {
                    timer_SocketConnect.Enabled = false;                    frmss.Close();                    frmss = null;                }
           }
}主窗口的菜单click        private frmDialog childForm;
        private void ShowNewForm(object sender, EventArgs e)
        {
            if (childForm == null)
            {
                childForm = new frmDialog(toolStripStatusLbl.BackColor,toolStripStatusLbl.Text);                childForm.toolStaEvent += new EventHandler((sender1, e1) => { toolStripStatusLbl.Text = childForm.TextBoxValue; });                childForm.toolStaEvent += new EventHandler((sender1, e1) => { toolStripStatusLbl.BackColor = childForm.CLRConnectStatus; });                childForm.FormClosed += new FormClosedEventHandler((sender2, e2) => { childForm = null; });                childForm.MdiParent = this;                childForm.Show();
            }
            else
            {
                childForm.Activate();
            }
        }现在的问题是,我的timer是一秒执行一次,不用担心只执行一次,会执行很多次,但是每次触发事件的时候,代码是改变了toolStripStatusLbl.Text 与toolStripStatusLbl.BackColor的值,但是实际却没效果。如果我单独用一个button去执行,是有效果的。        private void button3_Click(object sender, EventArgs e)
        {
            this.TextBoxValue = "TCP连接已经建立";
            this.CLRConnectStatus = Color.Green;            if (toolStaEvent != null)
                toolStaEvent(this, e);   
        }请教原因?

解决方案 »

  1.   

    调下看看进这句了没
    timer_SocketConnect.Enabled = true;
      

  2.   

    在timer事件最后加这么一句看看
    Application.DoEvents();
      

  3.   

    中间有一段话大家可能没看到:现在的问题是,我的timer是一秒执行一次,不用担心只执行一次,会执行很多次,但是每次触发事件的时候,代码是改变了toolStripStatusLbl.Text 与toolStripStatusLbl.BackColor的值,但是实际却没效果。如果我单独用一个button去执行,是有效果的。
    我是有debug进去看着属性改变的
      

  4.   

    好像DoEvents是把程序处理的部分提交给操作系统。
      

  5.   


    你的timer间隔太小,执行压力太大,程序无法再处理其他事件了。
    Application.DoEvents();//让程序继续处理其他应该处理的事件。
      

  6.   

    你用的那个timer,是UI的,还是system的?