暂停c#程序几秒钟?

时间:2013-01-04 14:19:42

标签: c# .net

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

我想显示窗口一秒钟并自动最小化。 我添加了两个计时器,用于最大化窗口,一个用于最小化; 当窗口最大化时,如果我使用睡眠方法,它希望在那里停留几秒钟,它不会在窗体上显示文本。那么有什么方法可以暂停窗口几秒钟。

3 个答案:

答案 0 :(得分:1)

我想如果你不想使用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();
}

答案 1 :(得分:1)

如果您使用的是.NET 4.5,则可以使用Delay method上的Task class等待预定的时间,如下所示:

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 structure(从CancellationTokenSource创建)以取消此操作。

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

此处async / await个关键字将确保调用await Task.Delay后的代码运行在正确的SynchronizationContext上(如果您正在执行UI,这很重要)最小化和最大化窗口等操作。另请注意,如果您通过调用返回的Task上的Task.Delay参数为ConfigureAwait method,则 MaximizeScreen)。

请注意,对async的呼叫,因为它被标记为async Task.Delay,一旦达到Task的呼叫,将立即返回,因此您不应期望屏幕是完成后最小化。

如果您想等到屏幕完成,那么我建议您公开任务并等待它。

首先,修改签名以返回private async Task MaximizeScreenAsync(CancellationToken cancellationToken) (没有其他更改):

Task

然后在通话网站上,只需致电CancellationToken上的Wait method,使用您传递给MaximizeScreenAsync的同一MaximizeScreenAsync(cancellationToken).Wait(cancellationToken); 来呼叫:

{{1}}

答案 2 :(得分:0)

你可能会有一种闪屏等待。这是一个简单的窗体,显示一些文本消息并保持打开一段时间:

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

while System.Timers.Timer

  

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

相关问题