2012-04-21 6 views
1

C#でいくつかのコードを実行することは可能ですか?私はあなたがタイマーを使用することができますが、より簡単で迅速な方法があることを知っていますか?あなたが行うことができますバッチのように:C#以外の "ping localhost ..."のようなコードを遅らせる方法

echo Hello 
ping localhost -n 10 > nul 
echo World 
pause > nul 

は、だから私は、C#でこれを行うことができ、私はWinformsのためにそれを必要とするので、それは、Winformsのか、単にコンソールで動作するでしょう... [編集]私は持っている必要があります一時停止する単一の方法ですが、残りのアプリは引き続き使用します。たとえば、ボタンがある場合はをクリックし、5秒後に呼び出された残りのメソッドを続行します。それでもまだ、他のボタンを押すことができるでしょうか?

答えて

1

Begininvoke?

new Action(() => { 
    Console.WriteLine("Waiting..."); 
    Thread.Sleep(10000); 
    Console.WriteLine("Over"); 
}).BeginInvoke(null, null); 
+0

これは完璧に感謝しています – Oztaco

1

はい - 希望のミリ秒数を渡してThread.Sleepに電話することができます。実行中のコードは一時停止し、経過したミリ秒数を待ち、実行を再開します。この手法は普遍的なもので、winformsやコンソールアプリケーションで動作します。

winformsでは、UIスレッドからThread.Sleepを呼び出してはいけません。代わりに、遅延と遅れの後にメソッドを2つに分割し、Sleepでスレッドを生成し、コードの2番目の部分をInvokeで呼び出します。

// This is your old method 
void OnClick(object sender, EventArgs e) { 
    // ... before the delay 
    Thread.Sleep(1000); 
    // After the delay 
} 

// This is your new method 
void OnClick(object sender, EventArgs e) { 
    // ... before the delay 
    new Thread(() => {Thread.Sleep(1000); Invoke(Continuation); }).Start(); 
} 

void Continuation() { 
    // After the delay 
} 
+0

これは良い方法ですが、アプリケーション全体がフリーズします。私はちょうど誰かがボタンをクリックして5秒待ってからそのメソッドの残りの部分を続けるような、ある機能を遅らせる必要がありますが、他のボタンやものを押し込むことはできますか? – Oztaco

+0

@ leaf68 UIスレッドで遅延を実行すると、アプリケーションがフリーズします。あなたはスレッドを生成し、 'Invoke'を通してあなたの継続をコールバックします。バックグラウンドスレッドからUIスレッドへの通信方法の例については、このプログラム(この例ではhttp://www.yoda.arachsys.com/csharp/threads/winforms.shtml)を参照してください。 – dasblinkenlight

+0

それは動作しますが、私は自分のメソッドを分割することを避けたかったので、なぜ私もタイマーを使いたくなかったのです。 – Oztaco

関連する問題