我想暂停 C# 程序几秒钟,我不想使用 system.threading.thread.sleep,有没有其他方法可以暂停程序。
我想显示窗口一秒钟并自动最小化。我添加了两个计时器,一个用于最大化窗口,一个用于最小化;当窗口最大化时,如果我使用睡眠方法,我想在那里停留几秒钟,它不会在表单上显示文本。那么有什么方法可以暂停窗口几秒钟。
我想如果你不想使用Sleep
唯一剩下的就是使用这样的计时器:
System.Timers.Timer timer1= new System.Timers.Timer(1000);
timer1.Elapsed += new ElapsedEventHandler(maximizeScreen);
timer1.Start();
private void maximizeScreen(object source, ElapsedEventArgs e) {
//Do the maximizing
//disable the timer
((System.Timers.Timer)source).Stop();
System.Timers.Timer timer2= new System.Timers.Timer(2000);
timer2.Elapsed += new ElapsedEventHandler(minimizeScreen);
timer2.Start();
}
private void minimizeScreen(object source, ElapsedEventArgs e) {
//Do the minimizing
//disable the timer
((System.Timers.Timer)source).Stop();
}
如果您使用的是 .NET 4.5,则可以使用类上的Delay
方法等待预定的时间,如下所示:Task
private async void MaximizeScreenAsync(CancellationToken cancellationToken)
{
//Do the maximizing
// Hold off for two seconds.
await Task.Delay(TimeSpan.FromSeconds(2), cancellationToken);
// Minimize the screen.
}
请注意cancellationToken
参数的使用,如果需要,您将传递一个CancellationToken
结构(从 a 创建CancellationTokenSource
)来取消它。
该MaximizeScreen
方法假定您最初是手动触发屏幕显示的。
此处的async
/await
关键字将确保调用后的代码await Task.Delay
正确运行SynchronizationContext
(如果您正在执行 UI 操作,例如最小化和最大化窗口,这很重要。另请注意,如果您ConfigureAwait
使用Task
从调用返回的)上的 false 参数Task.Delay
。
请注意,对 的调用MaximizeScreen
,因为它被标记为async
,一旦调用到,就会立即返回async Task.Delay
,所以你不应该期望屏幕在完成时被最小化。
如果您想等到屏幕完成,那么我建议您公开一个任务并等待它。
首先,修改签名以返回 a Task
(没有其他变化):
private async Task MaximizeScreenAsync(CancellationToken cancellationToken)
然后在调用站点,只需调用返回的方法Wait
(Task
使用CancellationToken
您传递给的方法MaximizeScreenAsync
):
MaximizeScreenAsync(cancellationToken).Wait(cancellationToken);
您可能需要等待启动画面。这是一个简单的 windows 窗体,它显示一些文本消息并保持打开一段时间:
public partial class WaitWindow : Form
{
System.Windows.Forms.Timer timer;
public WaitWindow(int interval)
{
InitializeComponent();
this.Shown += new EventHandler(WaitWindow_Shown);
timer = new Timer();
timer.Interval = interval;
timer.Tick += new EventHandler(timer_Tick);
}
void WaitWindow_Shown(object sender, EventArgs e)
{
timer.Start();
}
void timer_Tick(object sender, EventArgs e)
{
timer.Stop();
this.Close();
}
}
它使用计时器在给定的时间段内关闭。至少你可以这样使用它:
new WaitWindow(1000).ShowDialog();
在谈论 windows 窗体时,使用System.Windows.Forms.Timer更合适:
此计时器针对在 Windows 窗体应用程序中的使用进行了优化,并且必须在窗口中使用。
基于服务器的 Timer 设计用于多线程环境中的工作线程。