弹出窗口的代码
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);
}请教原因?
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);
}请教原因?
timer_SocketConnect.Enabled = true;
Application.DoEvents();
我是有debug进去看着属性改变的
你的timer间隔太小,执行压力太大,程序无法再处理其他事件了。
Application.DoEvents();//让程序继续处理其他应该处理的事件。