为什么局部变量在timerclick事件中变为空

本文关键字:事件 局部变量 timerclick 为什么 | 更新日期: 2023-09-27 18:13:45

当我以编程方式调用Timer1_Tick(null,null(事件时,消息是否为空?如何解决事件触发时调用的OnMessageReceieve问题。

string message = string.Empty;
public void OnMessageReceieve(string message)
{
   //  I have a message in message variable
   txtMessage.Text += message;
   Timer1.Enabled = true;
   Timer1_Tick(null, null);
   // UpdatePanel1.Update();                  
}
protected void Timer1_Tick(object sender, EventArgs e)
{
   //message variable gets empty here?
   if (!string.IsNullOrEmpty(message))
   {
      txtMessage.Text += message;
   }                
}

为什么局部变量在timerclick事件中变为空

您混淆了您在此处声明的成员message

string message = string.Empty;

使用参数,您(意外地?(命名了相同的message

OnMessageReceive方法中,您不设置成员值,但在Timer1_Tick中,您可以访问该成员。

立即的解决方案是在OnMessageReceive:中设置成员

public void OnMessageReceieve(string message)
{
     txtMessage.Text += message;
     // set member!!
     this.message = message;
     Timer1.Enabled = true;
     Timer1_Tick(null, null);
     // UpdatePanel1.Update();          
}
string message = string.Empty; //Never change.
public void OnMessageReceieve(string message)
{
   //  I have a message in message variable (this is a parameter, not a field class)
   txtMessage.Text += message;
   Timer1.Enabled = true;
   Timer1_Tick(null, null);
   // UpdatePanel1.Update();                  
}
protected void Timer1_Tick(object sender, EventArgs e)
{
   //message variable gets empty here?
   if (!string.IsNullOrEmpty(message)) //<-- this.message
   {
      txtMessage.Text += message;
   }                
}

解决方案:

string message = string.Empty;
public void OnMessageReceieve(string message)
{
   //  I have a message in message variable
   this.message = message; //<-- Add this line.
   txtMessage.Text += message;
   Timer1.Enabled = true;
   Timer1_Tick(null, null);
   // UpdatePanel1.Update();                  
}
protected void Timer1_Tick(object sender, EventArgs e)
{
   //message variable gets empty here?
   if (!string.IsNullOrEmpty(message))
   {
      txtMessage.Text += message;
   }                
}