2017-08-07 12 views
-1

QRコードをカメラで読み取るwhile(true)ループがあります。有効なQRコードを読み込んだときにループを一時停止し、何か(データベースに値を挿入)してから、他のQRコードを読み取るループを続行します。私は休憩を使用して続行が、ループを出て行く破ると私はthem.I'mは事前にC#とSQL server.Thanksで作業をしたくない私のコードを飛ばし続けるしばらくループを一時停止して何かをやり直し、C#でやり直すには?


編集:IドンQrコードの読み方に問題があります。私のコードが正しく動作しています。ループを一時停止して何かをしてから、loop.belowを続ける方法を知る必要があります。私は声明

while ((int)(1) != 0) 
       { 
        ho_Image.Dispose(); 
        HOperatorSet.GrabImage(out ho_Image, hv_AcqHandle); 

         HOperatorSet.DispObj(ho_Image, HWindow); 
         operation(ho_Image, hv_Type1, hv_Type2, hv_Num1ecc, hv_Num2qr, hv_Qr, hv_Ecc, 
         HWindow, hv_Timeoutqr, hv_Timeoutecc, out hv_DecodedDataStrings1, 
         out hv_DecodedDataStrings2, out hv_DataCodeHandle1, out hv_DataCodeHandle2, 
         out hv_foundecc, out hv_foundqr); 

         hv_Qr = 0; 
         hv_Ecc = 0; 
         //MessageBox.Show(" QR NuM : " + this.QRNumber); 
         //MessageBox.Show("ECC Number : " + this.ECCNumber); 

         if (this.QRNumber == QRNum && this.ECCNumber == ECCNum) 
         { 
          foreach (string qr in this.QRValue) 
          { 
           MessageBox.Show(" QR value : " + qr); 
          } 

          foreach (string ecc in this.ECCValue) 
          { 
           MessageBox.Show("ECC value : " + ecc); 
          } 


         } 
       } 
+1

非同期タスクを追加し、データがデータベースに保存されるのを待ちます。 – raichiks

+2

"利回り"の使用法を見てもらえますか? –

+2

私が間違っていると私を訂正しますが、コードを読み込むためのコードが非同期でない場合、他のコマンドは完了するまで実行されません。 – Jelman

答えて

0

私は何かが欠けていると思う場合でしばらく停止するには可能性がありますが、この作業をする必要があります:実際にwhileループを一時停止するようなものありません

​​
0

。ループは一時停止することはできませんが、whileループが壊れる可能性があります。ループから抜けることができます。実際には、プログラム全体を "一時停止"するスリープ状態にプログラム全体を置くことができます。条件が満たされたときにブロック内にループをトラップすることもできます。これは、ループが何かを続けるのを「一時停止」し、そのブロックを入力して終了してからループを再開することもできます。

これをトラップするには、フラグを使用できます。条件が満たされると、フラグをtrueに設定し、そのフラグが真であるかどうかを確認してから、データベースなどに挿入します。 最後に、ループの最後にフラグをfalseに戻します。

bool read = false; 
while(true) 
{ 
    //Start reading your QR here or do whatever you want to do; However, make sure that the variable 'read' is set to true when you read the code 
    ReadQR(); 

    //Now check if a code is read 
    if(read) 
    { 
      //Do whatever you want to do here if the code was read such as insertion to database, this technically will pause the loop and finish what's in this block then continue on with the loop, even though I highly recommend breaking your code into methods; for instance don't do the insertion logic here instead put the logic in a method and call it here. 

      InsertQRCodeToDb(code); 

      //Set the controller variable back to false 
      read = false; 
    } 
} 

P.S.:ここ

は非常に簡単なサンプルコードですなぜあなたは1をintにキャストしていますか?なぜあなたの状態(int)1!= 0ですか? while(true)などの条件を入力することはできませんか?または(1)それはずっと簡単でキャスティングが必要ないのですか?

関連する問題