Поток: переменный доступ и завершение потока
-
12-10-2019 - |
Вопрос
Позвольте мне начать с показывания вам моего кода до сих пор:
using System;
using System.Threading;
class MathQuiz
{
static void Main()
{
int score = 0;
string preanswer;
decimal answer = 0;
Console.WriteLine("Welcome to Project5, a MathQuiz project.");
Console.WriteLine("You will be asked 10 questions, and will have 30 seconds to read and answer each one.");
Console.WriteLine("Press any key to begin.");
Console.ReadKey(true);
Console.WriteLine("What is 2 + 2?");
Thread ask = new Thread (new ThreadStart (MathQuiz.prompt));
ask.Start();
Thread.Sleep(3000);
//This is where I want to end the thread if it isn't already done.
if (answer == 4)
{
score = score+1; //Here's where I don't know if my adding is correct.
}
Console.WriteLine("Press any key to move on to the next question!");
Console.ReadKey(true);
}
static void prompt()
{
preanswer = (Console.ReadLine());
if (!decimal.TryParse(preanswer, out answer))
{
Console.WriteLine("That wasn't even a number or decimal!");
}
else
{
answer = decimal.Parse(preanswer);
}
}
}
Итак, когда я пытаюсь скомпилировать этот код, я получаю ошибки CS0103 для Preanswer и отвечаю в методе «приглашение».
Это приводит к 3 вопросам:
Что именно мне нужно сделать, чтобы сделать Preanswer и ответить доступным для метода «быстрого»?
Я правильно добавил 1 в переменную оценку?
Как я могу завершить ветку, если он работает? (В этом случае поток "Ask" не закончится, пока не напечатает ответ.)
Пожалуйста, просто скажите мне, что изменить. Я не знаю слов кодирования и терминологии, потому что я только начал несколько недель назад. Пожалуйста, постарайтесь быть максимально ясным.
Решение
static string preanswer;
static decimal answer = 0;
static void Main()
{
int score = 0;
//string preanswer;
//decimal answer = 0;
...
и т.п.
Другие советы
Чтобы дождаться потока, используйте join () ... это скажет потоке, что функция вызывает, чтобы ждать потока, пока он не соединится:
ask.Join(int);