-2

C# プログラムを数秒間一時停止したいのですが、 system.threading.thread.sleep を使用したくありません。プログラムを一時停止する他の方法はありますか。

ウィンドウを数秒間表示して、自動的に最小化したい。ウィンドウの最大化用と最小化用の 2 つのタイマーを追加しました。ウィンドウが最大化されたときに、スリープメソッドを使用するとフォームにテキストが表示されない場合、数秒間そこにとどまりたいです。ウィンドウを数秒間一時停止する方法はありますか。

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を渡します。CancellationTokenCancellationTokenSource

このMaximizeScreen方法では、最初に画面の表示を手動でトリガーしていることを前提としています。

ここのasync/awaitキーワードは、 への呼び出しの後のコードawait Task.Delayが適切に実行されるようにします (これは、ウィンドウの最小化や最大化などの UI 操作を実行している場合SynchronizationContextに重要です。また、メソッドをへの呼び出しから返される のfalse のパラメータ)。ConfigureAwaitTaskTask.Delay

への呼び出しMaximizeScreenは としてマークされているため、asyncへの呼び出しに達するとすぐに戻るasync Task.Delayので、完了時に画面が最小化されるとは思わないでください。

画面が完成するまで待ちたい場合は、タスクを公開して待つことをお勧めします。

最初に、署名を変更して a を返しますTask(それ以外は何も変更しません)。

private async Task MaximizeScreenAsync(CancellationToken cancellationToken) 

そして、呼び出しサイトで、返された でWaitメソッドを呼び出すだけです (に渡すのと同じものを使用します):TaskCancellationTokenMaximizeScreenAsync

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 の間:

サーバーベースのタイマーは、マルチスレッド環境でワーカー スレッドを使用するように設計されています。

于 2013-01-04T14:37:02.430 に答える