设置简单超时

时间:2015-07-14 14:27:00

标签: c# timeout

我已经检查了其他问题,因为我是C#的超时,但由于我是初学者,我真的不知道如何在我的代码中实现它们。它们看起来太复杂了。

我有一个文本框,我添加了一个点击事件。单击后,用户将文本框的内容复制到剪贴板。为了使复制过程对用户来说很明显,我改变了文本框的背面颜色。 复制内容后,我想将文本框的背面颜色恢复正常。所以我需要设置超时。

<input type="checkbox" ng-model="site.isChecked" id="item-f{{site.id}}"/>

如何设置超时?一个例子就是很棒。

3 个答案:

答案 0 :(得分:2)

不确定这是否符合您的要求(初学者?),但这会通过使用Task调用文本颜色更改来执行简单的闪烁延迟之后:

textBox.BackColor = Color.MistyRose;
Task.Run(() =>
{
    Thread.Sleep(200); // delay
    this.BeginInvoke((MethodInvoker)delegate
    {
        textBox.BackColor = SystemColors.Window;
    });
});

答案 1 :(得分:1)

使用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;
    });
}

答案 2 :(得分:1)

假设您有一个名为test的文本框,如果您使用的是Windows窗体,则可以在WPF中使用调度程序计时器或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();