私はIATというプロジェクトに取り組んでいます。 2つの言葉では、上の隅に2つのカテゴリ(左、右)があり、これらのカテゴリに関連付けられた単語のリストが画面の中央にランダムに表示されます(単語は1つのカテゴリにのみ一致します)。 単語が中央に表示された後、プログラムは「停止」し、ユーザーがキーを押して単語をソートするまで待機する必要があります(左のカテゴリは左の矢印、右は右です)。ユーザーが答えを出した後、プログラムは答えに無駄な時間を数えます。次に、もう1つの単語が表示され、このプロセスは何度か繰り返されます。
要約すると、私はRedKey()に相当するものを作りたいと思います。デバッグ中は、while(true/stopwatch.IsRunning()/ etc)ループでプログラムが押されたキーに反応しないことに気付きました。プログラマーにユーザーの回答を待って反応させるにはどうすればよいですか。wpf key while while whileループ
-2
A
答えて
0
プログラムは単語を示しているとき、あなたは(でSystem.Timers.Timerを使用して)タイマーを起動する必要がありますが、そのEllapsedイベントを処理、ハンドラ内であなたのカウンターになる変数(どのくらいのユーザーの回答をインクリメントする必要があります質問) MainWindowのKeyDownイベントでは、押されたキーが左または右の矢印かどうかを確認できます。タイマーが有効な場合は、答えが用意されていることを知っています。ユーザーが矢印を押した秒数(もちろん、タイマーの間隔を調整する必要があります)。
ここではすべてがご質問があればちょうど頼む
<Label x:Name="label" Content="Right or left" HorizontalAlignment="Left" Margin="125,72,0,0" VerticalAlignment="Top"/>
を動作することを示すために、(当然のちょうど質問ロジックなし)XAMLで
public partial class MainWindow : Window
{
Timer answerTimeTimer; // it's for counting time of answer
Timer questionTimer; // this is used for generating questions
int timeOfAnswer;
public MainWindow()
{
InitializeComponent();
questionTimer = new Timer()
{
Interval = 2500
};
answerTimeTimer = new Timer()
{
Interval = 1000
};
answerTimeTimer.Elapsed += AnswerTimeTimer_Elapsed;
questionTimer.Elapsed += QuestionTimer_Elapsed;
questionTimer.Start();
}
private void QuestionTimer_Elapsed(object sender, ElapsedEventArgs e)
{
AskQuestion();
}
private void AskQuestion()
{
//Your questions logic
Console.WriteLine("Question asked");
Dispatcher.Invoke(new Action(() => label.Content = "Question asked")); // This line is just to update the label's text (it's strange because you need to update it from suitable thread)
answerTimeTimer.Start();
questionTimer.Stop();
}
private void AnswerTimeTimer_Elapsed(object sender, ElapsedEventArgs e)
{
timeOfAnswer++;
Dispatcher.Invoke(new Action(() => label.Content = timeOfAnswer));
}
private void Window_KeyDown(object sender, KeyEventArgs e)
{
if (e.Key == Key.Left || e.Key == Key.Right)
{
if (answerTimeTimer.Enabled)
{
answerTimeTimer.Stop();
//Here you can save the time from timeOfAnswer
Console.WriteLine("Question answered in " + timeOfAnswer);
Dispatcher.Invoke(new Action(() => label.Content = "Question answered in " + timeOfAnswer));
timeOfAnswer = 0; // Reset time for the next question
questionTimer.Start();
}
}
}
}
そして、ちょうど1ラベルを完全なコードを持っています: )
関連する問題
- 1. whileループwhile while
- 2. whileループwhileループwhileループ
- 3. whileループwhileループwhileループより高速
- 4. A Whileループwhileループwhileループ - SQL
- 5. bash while break while whileループ?
- 6. whileループwhile文?
- 7. Java BlockingQueue while()whileループ
- 8. Java while whileループ式
- 9. Whileループwhile第2 whileループwhile子サブカテゴリを取得する
- 10. C#while while whileループを再起動
- 11. Pythonスレッドとwhileループwhile
- 12. C++ switch while default whileループ
- 13. whileループwhile a C++関数
- 14. PHP AJAX whileループwhileフォーム
- 15. Fmod While Whileループ条件エラー
- 16. whileループwhile compare with compareTo
- 17. Netezza while whileループ構文
- 18. while Sentinels for Javaのwhileループ
- 19. Python 3のwhileループwhile
- 20. Hoare Logic whileループwhile '<='
- 21. Python Pokemon Game While Whileループ
- 22. while条件whileループbash
- 23. whileループ内でcontinue文whileループwhile検索ページ機能
- 24. whileループin whileループ内のdiv with
- 25. Python whileループwhileループのメインループ内
- 26. whileループをwhileループで使用する
- 27. whileループ
- 28. whileループ
- 29. whileループ
- 30. SQL:whileループwhileループ
問題のあるコードを表示する必要があります。 UIスレッドでループを実行していますか?ユーザアクションを待っている間にタイムアウトを整理するために、単純な 'Timer'を使うことができます。時間を測定するには、 'Stopwatch'または' DateTime.Now'を使います。 – Sinatr