设置简单超时
Set simple timeout
我已经检查了 SO 中关于 C# 超时的其他问题,但由于我是初学者,我真的不知道如何将它们实现到我的代码中。它们看起来太精致了。
我有一个文本框,我添加了一个点击事件。单击后,用户将文本框的内容复制到剪贴板。为了让用户注意到复制过程,我更改了文本框的背景颜色。 复制内容后,我想将文本框的背景颜色改回正常。所以我需要设置一个超时时间。
private void IDBox_Click(object sender, EventArgs e)
{
CopyToClipboard((TextBox)sender);
}
private void CopyToClipboard(TextBox textBox)
{
if (textBox.Text != "")
{
textBox.BackColor = System.Drawing.Color.MistyRose;
Clipboard.SetText(textBox.Text);
// set 200ms timeout and then change BackColor
//textBox.BackColor = System.Drawing.SystemColors.Window;
}
}
如何设置超时?举个例子就好了。
使用 Timer
并在 Elapsed
事件中改回颜色。
让您入门的快速粗略(未经测试)代码:
private void CopyToClipboard(TextBox textBox)
{
if (textBox.Text != "")
{
textBox.BackColor = System.Drawing.Color.MistyRose;
Clipboard.SetText(textBox.Text);
// Create a timer with a 1 second interval.
System.Timers.Timer aTimer = new System.Timers.Timer(1000);
// Hook up the Elapsed event for the timer.
aTimer.Elapsed += OnTimedEvent;
// Only tick one time
aTimer.AutoReset = false;
// Start timer
aTimer.Enabled = true;
}
}
private void OnTimedEvent(Object source, ElapsedEventArgs e)
{
this.BeginInvoke((MethodInvoker)delegate
{
textBox.BackColor = System.Drawing.SystemColors.Window;
});
}
不确定这是否符合您的要求(初学者?),但这将通过使用 Task
和 调用[来完成简单的 闪烁 =16=] 延迟后文本颜色变回:
textBox.BackColor = Color.MistyRose;
Task.Run(() =>
{
Thread.Sleep(200); // delay
this.BeginInvoke((MethodInvoker)delegate
{
textBox.BackColor = SystemColors.Window;
});
});
假设您有一个名为 test 的文本框,您可以使用 WPF 中的调度程序计时器,或者如果您使用 windows 表单,则可以使用 Windows 表单计时器。
test.Background = new SolidColorBrush(Colors.MistyRose);
Clipboard.SetText(test.Text);
var dispatcherTimer = new System.Windows.Threading.DispatcherTimer();
dispatcherTimer.Tick += new EventHandler((s, x) =>
{
dispatcherTimer.Stop();
test.Background = new SolidColorBrush(Colors.White);
});
dispatcherTimer.Interval = new TimeSpan(0, 0, 0, 0, 200);
dispatcherTimer.Start();
我已经检查了 SO 中关于 C# 超时的其他问题,但由于我是初学者,我真的不知道如何将它们实现到我的代码中。它们看起来太精致了。
我有一个文本框,我添加了一个点击事件。单击后,用户将文本框的内容复制到剪贴板。为了让用户注意到复制过程,我更改了文本框的背景颜色。 复制内容后,我想将文本框的背景颜色改回正常。所以我需要设置一个超时时间。
private void IDBox_Click(object sender, EventArgs e)
{
CopyToClipboard((TextBox)sender);
}
private void CopyToClipboard(TextBox textBox)
{
if (textBox.Text != "")
{
textBox.BackColor = System.Drawing.Color.MistyRose;
Clipboard.SetText(textBox.Text);
// set 200ms timeout and then change BackColor
//textBox.BackColor = System.Drawing.SystemColors.Window;
}
}
如何设置超时?举个例子就好了。
使用 Timer
并在 Elapsed
事件中改回颜色。
让您入门的快速粗略(未经测试)代码:
private void CopyToClipboard(TextBox textBox)
{
if (textBox.Text != "")
{
textBox.BackColor = System.Drawing.Color.MistyRose;
Clipboard.SetText(textBox.Text);
// Create a timer with a 1 second interval.
System.Timers.Timer aTimer = new System.Timers.Timer(1000);
// Hook up the Elapsed event for the timer.
aTimer.Elapsed += OnTimedEvent;
// Only tick one time
aTimer.AutoReset = false;
// Start timer
aTimer.Enabled = true;
}
}
private void OnTimedEvent(Object source, ElapsedEventArgs e)
{
this.BeginInvoke((MethodInvoker)delegate
{
textBox.BackColor = System.Drawing.SystemColors.Window;
});
}
不确定这是否符合您的要求(初学者?),但这将通过使用 Task
和 调用[来完成简单的 闪烁 =16=] 延迟后文本颜色变回:
textBox.BackColor = Color.MistyRose;
Task.Run(() =>
{
Thread.Sleep(200); // delay
this.BeginInvoke((MethodInvoker)delegate
{
textBox.BackColor = SystemColors.Window;
});
});
假设您有一个名为 test 的文本框,您可以使用 WPF 中的调度程序计时器,或者如果您使用 windows 表单,则可以使用 Windows 表单计时器。
test.Background = new SolidColorBrush(Colors.MistyRose);
Clipboard.SetText(test.Text);
var dispatcherTimer = new System.Windows.Threading.DispatcherTimer();
dispatcherTimer.Tick += new EventHandler((s, x) =>
{
dispatcherTimer.Stop();
test.Background = new SolidColorBrush(Colors.White);
});
dispatcherTimer.Interval = new TimeSpan(0, 0, 0, 0, 200);
dispatcherTimer.Start();