3

私は現在アプリケーションを開発しています。時間の遅延を実装したいと考えています。System.Threading.Thread.Sleep(x); を使用したくありません。これを読むと、スレッドが停止します(UIがフリーズします)

私が現在書いているコードは次のとおりです。

public void atimerdelay()
{
    lblStat.Text = "In the timer";
    System.Timers.Timer timedelay;
    timedelay = new System.Timers.Timer(5000);
    timedelay.Enabled = true;
    timedelay.Start();
}

atimerdelay() が (lblStat を使用して) 呼び出されることは知っていますが、5 秒の遅延はありません。http://msdn.microsoft.com/en-us/library/system.timers.timer.aspxを読みましたが、上記のコードが機能しない理由がわかりません。

追加情報 - (ハムレット ハコビャンについて追加)

このアプリケーションは「カード チェッカー」アプリケーションです (大学のプロジェクト - 実際の情報は使用または保存されません)。ユーザーが関連するすべての情報を入力し、[チェック] をクリックすると、検証メソッドのリストが呼び出されます。これらのいずれかが呼び出される前に、ping が実行されて、コンピュータ上でライブ インターネット接続が確立されていることが確認されます。ping と検証の開始の間にわずかな遅延を追加したいと考えています。

4

5 に答える 5

7

どうですか:

await Task.Delay(5000)

? UI スレッドをブロックせず、見栄えも良いです。

于 2013-01-31T12:09:02.833 に答える
2

この素晴らしいスニペットを決して忘れません。Windows フォーム アプリケーションに適しており、ファイルを作成するよりもはるかに軽量ですTimer

于 2013-01-31T12:08:17.990 に答える
1

遅延関数を検索した後(Sleepを使用していない)、これを見つけました

public static DateTime PauseForMilliSeconds(int MilliSecondsToPauseFor)
{
    System.DateTime ThisMoment = System.DateTime.Now;
    System.TimeSpan duration = new System.TimeSpan(0, 0, 0, 0, MilliSecondsToPauseFor);
    System.DateTime AfterWards = ThisMoment.Add(duration);

    while (AfterWards >= ThisMoment)
    {
        System.Windows.Forms.Application.DoEvents();
        ThisMoment = System.DateTime.Now;
    }

    return System.DateTime.Now;
}

でテストされ、完全に動作し.NET 4.0ます。たぶん、これは他の誰かにとって役立つかもしれません。

于 2013-09-22T20:09:42.043 に答える
0

を使用しSystem.Timers.Timerて、時間間隔が経過した後にイベントを発生させることができます。単に実行を遅らせるだけでは役に立ちません。

timedelay.Elapsed += delayedFunction;コードに : を追加した場合delayedFunction、5 秒後に呼び出されます。

于 2013-01-31T12:11:07.990 に答える
0

ユーザーが関連するすべての情報を入力し、[チェック] をクリックすると、検証メソッドのリストが呼び出されます。これらのいずれかが呼び出される前に、ping が実行されて、コンピュータ上でライブ インターネット接続が確立されていることが確認されます。ping と検証の開始の間にわずかな遅延を追加したいと考えています。

時間のかかるタスクはすべて別のスレッドで実行することをお勧めします。お持ちの場合は( TPL.NET 4.0+ )を使用できます。タスクが対話する場合、利用できない場合はイベントベースの非同期パターンを使用できます。TaskUITPL

Pingあなたが使用できることについて具体的にPing.SendAsync。詳細については、投稿を調べてください。

これらを試して、新しい、より興味深い質問に戻ってください。

于 2013-01-31T12:56:59.527 に答える