2017-07-14 52 views
0

我有一个标签弹出让用户点击复制按钮,它已被复制使用应用程序右下角的标签。但我希望文字在2秒左右后消失。然后回来,如果他们再次点击复制,这是我的副本按钮代码:C#如何使用标签上的用户计时器?

 private void copyBtn_Click(object sender, EventArgs e) 
    { 
     labelCopied.Text = "Copied to Clipboard!"; 
     Clipboard.SetText(btcTxtBox.Text); 
     SystemSounds.Hand.Play(); 

    } 

我知道labelCopied.Text.Remove(0);将清除的标签,但我无法弄清楚如何使用定时器

回答

2

使用Timer此实现它:

private void copyBtn_Click(object sender, EventArgs e) 
{ 
    labelCopied.Text = "Copied to Clipboard!"; 
    Clipboard.SetText(btcTxtBox.Text); 
    SystemSounds.Hand.Play(); 

    Timer t = new Timer(); 
    t.Interval = 2000; //2000 milliseconds = 2 seconds 
    t.Tick += (a,b) => 
    { 
     labelCopied.Text = string.Empty; 
     t.Stop(); 
    }; 

    t.Start(); 
} 

编辑

Task.Delay内部使用一个Timer。所以如果你不介意最小的性能开销,Task.Delay是很好的去。此外Task.Delay更便携,因为TimerWinForms特定的(在WPF你会使用DispatcherTimer

private async void copyBtn_Click(object sender, EventArgs e) 
{ 
    labelCopied.Text = "Copied to Clipboard!"; 
    Clipboard.SetText(btcTxtBox.Text); 
    SystemSounds.Hand.Play(); 
    await Task.Delay(2000); 
    labelCopied.Text = ""; 
} 
+0

谢谢,这将你推荐它是WinForms自然。计时器或Task.Delay? –

+0

'Task.Delay'在内部使用'Timer'。所以如果你不介意最小的性能开销,那么'Task.Delay'是很好的选择。另外'Task.Delay'更具可移植性,因为'Timer'是'WinForms'特定的(在'WPF'中你可以使用'DispatcherTimer') –

+0

谢谢,比线程休眠好得多,因为它暂停了应用程序。 –

1

假设的WinForms,用async/awaitTask.Delay(),像这样:

private async void copyBtn_Click(object sender, EventArgs e) 
{ 
    labelCopied.Text = "Copied to Clipboard!"; 
    Clipboard.SetText(btcTxtBox.Text); 
    SystemSounds.Hand.Play(); 
    await Task.Delay(2000); 
    labelCopied.Text = ""; 
}