ATM アプリケーションに似たプログラムがあります。私は Android デバイスをキーパッドとして使用しています。電話から C# プログラムにデータを送信しても問題ありません。スレッドを使用しています。ATM アプリケーションを実際に「開始」する方法に問題があります。
唯一の入力デバイスは android デバイスです。パソコンのキーボードも何も使いません。したがって、プログラムが表示されると、最初に、プログラムはどのような種類のトランザクションであるかを尋ねます。
private void FrontPage_Shown(object sender, EventArgs e)
{
Ask_Transaction();
}
そしてその中に・・・(編集部分)
public void Ask_Transaction()
{
string decoded_input = "";
decoded_input = KT.CheckPress(input); //"input" is the data from the arduino. the checkpress will decode it.
do
{
try
{
//input = serialPort.ReadLine();
switch (KT.CheckPress(input))
{
case "S5": //Card;
break;
case "S6": //Cardless
{
PF.Format_Cardless();
AskLanguage(); //if cardless, it will now ask the language. Once again, another input from serial is needed
}
break;
case "Cancel": PF.Format_TransactionCancelled();
break;
default:
break;
}
}
catch
{
//To catch ReadTimeout after 6 seconds
//"You do not respond to the alloted time.."
}
}
while (decoded_input != "S5"
|| decoded_input != "S6"
|| decoded_input != "Cancel");
}
私の問題は、do-while ループを使用して正しい入力 (S5 または S6 またはキャンセル) を取得するまで Ask_Transaction をループしようとすると、プログラムが遅れて最終的にクラッシュすることです。エラー表示なし。
編集: もちろん、ユーザーが正しいキーを入力することを保証することはできません。通常、キーパッドの数字だけをクリックすると、ATM プログラムは最初は通知しません。可能な正しい入力を待つだけです。また、ユーザーが S6 を入力すると、プログラムはこれらのキーパッド番号 s5 および s6 を使用して別の入力を求めます。問題は、プログラムが「連続」していないことです。あらゆる種類の助けをいただければ幸いです。