暂停c程序几秒钟

本文关键字:几秒 程序 暂停 | 更新日期: 2023-09-27 17:50:50

我想暂停C#程序几秒钟,我不想使用system.threading.thread.sleep,还有其他方法可以暂停程序吗。

我想显示窗口一秒钟并自动最小化。我添加了两个定时器,一个用于最大化窗口,另一个用于最小化;当窗口最大化时,我想在那里呆几秒钟,如果我使用睡眠方法,它不会在窗体上显示文本。那么,有没有办法让窗口暂停几秒钟呢。

暂停c程序几秒钟

我想如果你不想使用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,您可以在Task类上使用Delay方法等待一段预定的时间,如下所示:

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结构(从CancellationTokenSource创建(来取消它。

MaximizeScreen方法假设您最初手动触发屏幕的显示。

这里的async/await关键字将确保调用await Task.Delay后的代码在正确的SynchronizationContext上运行(如果您正在执行最小化和最大化窗口等UI操作,这一点很重要。请注意,如果您在调用Task.Delay时返回的Task上调用参数为false的ConfigureAwait方法,则情况并非如此(。

请注意,对MaximizeScreen的调用,因为它被标记为async,一旦到达对async Task.Delay的调用,就会立即返回,所以您不应该期望屏幕在完成时最小化。

如果你想等到屏幕完成,那么我建议你暴露一个任务并等待它

首先,修改签名以返回Task(没有其他更改(:

private async Task MaximizeScreenAsync(CancellationToken cancellationToken) 

然后在调用站点,只需在返回的Task上调用Wait方法(使用传递给MaximizeScreenAsync的相同CancellationToken(:

MaximizeScreenAsync(cancellationToken).Wait(cancellationToken);

您可能需要等待启动屏幕。这是一个简单的窗口窗体,它显示一些文本消息并保持打开一段时间:

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窗体应用程序和必须在窗口中使用。

而System.Timers.Timer:

基于服务器的Timer设计用于多线程环境。