2017-10-24 7 views
-3
 private void SetState(int i) 
    { 






     var task = Task.Factory.StartNew(() => 
      { 
       Stopwatch sw = new Stopwatch(); 
       sw.Start(); 

       if (getCannonState(i) == 0) 
        state = 0;      
       if (getCannonState(i) == 1)      
         state = 1; 
       if (getCannonState(i) == 2)      
         state = 2;     
       if (getCannonState(i) == 3)      
         state = 3; 
      if (getCannonState(i) == 4) 
      state = 4; 

       sw.Stop(); 
       Console.WriteLine("Set state of cannon " + i + " took {0} milliseconds", sw.ElapsedMilliseconds.ToString()); 


      }); 



    } 

Hererは私のコードです。 get cannonstateはスクリーンショットを取得し、ピクセルをチェックします。どのようにgetcannon状態が397msで動作するかを示します。まだsetstateを実行するには2000ミリ秒かかります。なぜそんなに遅いの?私はgetcannonstateから情報を受け取り、すぐに状態を設定する必要があります。2000ms遅くまで実行するには

iveタスクを使用しようとしましたが、そのような運がありません。あなたはgetCannonStateを5回呼び出すため...問題を解決し、一度だけgetCannonStateを呼び出すために、結果を変数にASSINGスクリプトはそれほど長くはかから

+0

に直接値を割り当てることも可能です私はあなたのコードをsupose:あなたはローカル変数に保存し、これを確認する必要がありますか? – Shirkam

+0

getCannonState(i)のmathodの内部で何が起こるかは、遅い部分のように見えるはずです。そして、それを何度も呼び出すのではなく、結果を保存するべきです。 これ以外にあなたが何をしようとしているのかははっきりしていません...いくつかの文脈を提供してください。 – Clerenz

答えて

2

;)

private void SetState(int i) { 
    var task = Task.Factory.StartNew(() => { 
    Stopwatch sw = new Stopwatch(); 
    sw.Start(); 
    var state = getCannonState(i); 

    sw.Stop(); 
    Console.WriteLine("Set state of cannon " + i + " took {0} milliseconds", sw.ElapsedMilliseconds.ToString()); 

    }); 
} 
+0

これは、getCannonStateに副作用がない場合に有効です。 – Surt

0

あなたはgetCannonState(i) 5回を呼んでいます。 `のC#`である

var checkState = getCannonState(i); 
if (checkState == 0) 
    ... 

しかし、あなたのコードに見て、それがstate

state = getCannonState(i);