C#windows窗体中的计时器控件
我使用onkeyPress事件和计时器来执行一个方法。我有一个文本框,我想允许用户在文本框中键入他们的服务器名称。传统上,每次按键都会触发事件,但我将我的方法放在timer Expressed events中,希望计时器仅在用户等待5秒钟时触发操作。下面是我的计时器C#windows窗体中的计时器控件,c#,timer,windows-forms-designer,C#,Timer,Windows Forms Designer,我使用onkeyPress事件和计时器来执行一个方法。我有一个文本框,我想允许用户在文本框中键入他们的服务器名称。传统上,每次按键都会触发事件,但我将我的方法放在timer Expressed events中,希望计时器仅在用户等待5秒钟时触发操作。下面是我的计时器 private void tbServer_KeyPress(object sender, KeyPressEventArgs e) { //atimer.Stop();
private void tbServer_KeyPress(object sender, KeyPressEventArgs e)
{
//atimer.Stop();
atimer = new System.Timers.Timer();
atimer.Interval = 5000;
atimer.AutoReset = false;
if (atimer.Enabled)
{
return;
}
else
{
atimer.Elapsed += new System.Timers.ElapsedEventHandler(OnTimedEvent);
atimer.Enabled = true;
}
}
综上所述,我希望我的计时器仅在计时器的另一个实例未运行时触发已用事件(即忽略计时器间隔5秒之前的任何按键)。在下面的已用计时器事件中执行完成后,我停止计时器
private void OnTimedEvent(object source, System.Timers.ElapsedEventArgs e)
{
if (ping(tbServer.Text, 1))
{
string txt = "Server Matched";
SetText(txt, true);
atimer.Enabled = false;
}
else
{
string txt = " Invalid Server Address";
SetText(txt, false);
atimer.Enabled = false;
}
}
无论条件如何,上述代码都会引发每种键类型的计时器已用事件。当用户没有留出5秒的时间间隔时,如何使其忽略按键类型?您可以在每次按键时创建一个新计时器 您需要先检查aTimer,然后再为其分配新计时器
if(aTimer == null)
{
aTimer = new System.Timers.Timer();
atimer.Interval = 5000;
atimer.AutoReset = false;
}
问题是,每次单击5秒后触发时,您都会创建一个新的计时器实例。如果禁用/处置现有计时器,其他计时器将停止
if (atimer != null)
{
atimer.Stop();
atimer.Dispose();
atimer = null;
}
atimer = new System.Timers.Timer();
atimer.Interval = 5000;
atimer.AutoReset = false;
if (atimer.Enabled)
{
return;
}
else
{
atimer.Elapsed += new System.Timers.ElapsedEventHandler(OnTimedEvent);
atimer.Enabled = true;
}
谢谢基思先生的快速回复。我应用你说的如下。我意识到当一个用户在不等待5秒的范围内键入10个字符时。它发射了三次,而不是以前的十次。我所做的是在代码下面添加我的if/else。并将else添加到您的if中,并再次执行我的if/else。