2016-07-27 2 views
0

ユーザー定義の時間にコードを実行しようとしていますが、datetime変数には実行時間が格納され、時間が変更されたかどうかを確認するために更新されません。C#コンソールアプリケーションで日時変数を常に更新する

static void Main(string[] args) 
     { 
      Console.WriteLine("please enter the date in m/d/y h/m/s am/pm  format "); 
      DateTime bombDate = Convert.ToDateTime(Console.ReadLine()); 
      repeat: 
      //DateTime bombDate = "7/27/2016 4:13:16 AM"; 

      DateTime now = DateTime.Now; 
       if (bombDate == now) 
       { 
        string _str = " this is a virus, you have been hit by a logic bomb ..."; 
        while (true) 
        { 
         foreach (char c in _str) 
         { 
          SendKeys.SendWait(c.ToString()); 
          Thread.Sleep(200); 


         } 
         Thread.Sleep(3000); 
        } 

       } 

       else { 
        goto repeat; 
       } 
+0

「今」という意味ですか? – user3185569

答えて

0

あなたがここにダニと二つの日付が同時に正確に日付がそれほど高くないNowマッチを実行するチャンスを比較している、まさに二つの日付と一致することはできません。あなただけの入力からの秒を指定しているので、次にこれを使用する:

if ((bombDate - now).TotalSeconds < 0) 

これは、それはあまりその1秒に最大で渡さがあっても、二つの日付と一致しました。

それとも必要な時間が経過している場合あなただけチェックすることができます。

if ((bombDate <= now)) 
+0

ありがとうたくさんの作品:) –

0

を私はコメントとしてこれを投稿だろうが、私はできません。

何をしようとしているのかに応じて、プログラムを作成し、Windowsタスクスケジューラのような標準的な機能を使用して特定の条件/時間に実際に実行することを検討する価値があります。

さらに、gotoは多くの人に正当な理由があります。基本的にループを作成しています。なぜそれを宣言していないのですか? 1つの可能性は、時間をカウントするループを使用することです(これは本質的にあなたが外部ループでやっていることです)。

DateTime now = NULL; 
while(bombDate != now){ 
    now = DateTime.Now; 
} 
// Other Code beginning with string _str = 

タイミングの問題を回避するには、最初の割り当て後/ループの前に別のスリープを追加することです。そうすれば、DateTime.Nowの連続呼び出しの間にある程度の時間が経過したことを確認できます。 user3185569のようなより細かい解像度をお勧めします。

+0

"goto"のアドバイスに感謝します。 –

関連する問題