-2

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

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

4

3 回答 3

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();
}
于 2013-01-04T14:26:33.007 回答
1

如果您使用的是 .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) 

然后在调用站点,只需调用返回的方法WaitTask使用CancellationToken您传递给的方法MaximizeScreenAsync):

MaximizeScreenAsync(cancellationToken).Wait(cancellationToken);
于 2013-01-04T14:40:03.207 回答
0

您可能需要等待启动画面。这是一个简单的 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 窗体应用程序中的使用进行了优化,并且必须在窗口中使用。

System.Timers.Timer

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

于 2013-01-04T14:37:02.430 回答