C# プログラムを数秒間一時停止したいのですが、 system.threading.thread.sleep を使用したくありません。プログラムを一時停止する他の方法はありますか。
ウィンドウを数秒間表示して、自動的に最小化したい。ウィンドウの最大化用と最小化用の 2 つのタイマーを追加しました。ウィンドウが最大化されたときに、スリープメソッドを使用するとフォームにテキストが表示されない場合、数秒間そこにとどまりたいです。ウィンドウを数秒間一時停止する方法はありますか。
残りの唯一のものを使用したくない場合は、次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
CancellationTokenSource
このMaximizeScreen
方法では、最初に画面の表示を手動でトリガーしていることを前提としています。
ここのasync
/await
キーワードは、 への呼び出しの後のコードawait Task.Delay
が適切に実行されるようにします (これは、ウィンドウの最小化や最大化などの UI 操作を実行している場合SynchronizationContext
に重要です。また、メソッドをへの呼び出しから返される のfalse のパラメータ)。ConfigureAwait
Task
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 フォーム アプリケーションでの使用に最適化されており、ウィンドウで使用する必要があります。
サーバーベースのタイマーは、マルチスレッド環境でワーカー スレッドを使用するように設計されています。